科技 · 實用指南
Docker 綁定掛載顯示「not a directory」?先證明兩端類型
重建容器或刪除資料前,稽核 daemon 主機來源、Compose 基準路徑與映像目標。

Docker 的「not a directory」代表檔案與目錄類型不一致;也可能是 daemon 找不到來源後把它建立成目錄。
凍結原始掛載宣告,先在 daemon 主機證明來源類型,再證明映像內目標,最後核對有效掛載。
凍結宣告與 daemon 環境
保存完整錯誤、原命令、所有 -f 檔、專案目錄與環境檔,並用 docker compose config 檢視合併掛載。
記錄 docker context show 與 docker info,確認真正執行 daemon 的主機;遠端 daemon 不會看到用戶端本機路徑。
在 daemon 主機證明來源類型
將來源解析為絕對路徑,以 stat 檢查連結本身與目標,記錄缺失、檔案、目錄或懸空連結。
若檔名已成目錄,檢查早先 -v 或短語法是否在來源缺失時建立它;診斷時使用 --mount 或 create_host_path:false。
先解析 Compose 基準路徑
多檔設定的相對路徑來自第一個基礎 Compose 檔;將絕對結果與渲染設定及 daemon 檔案系統對照。
明確檢查環境變數展開;空值可把路徑改到根目錄。只改宣告或變數,不刪除 volume 或映像。
證明映像內目標類型
在不套用衝突掛載的安全容器檢查目標與父目錄;若啟動腳本建立路徑,在相同初始化階段檢查。
判定哪一端錯誤:設定檔先建立主機檔案且目標為檔案;目錄樹必須目錄對目錄。
只重建一次並驗證
修正後只重建受影響容器,檢查 Mounts 的 Type、Source、Destination 與唯讀狀態。
同一使用者重跑原工作並從容器內讀取目標;仍失敗就比對真正主機路徑與映像摘要。
