テクノロジー · 実用ガイド
Docker の bind mount が「not a directory」?両端の型を先に確認
コンテナ再作成やデータ削除の前に、daemon ホストの source、Compose の基準パス、イメージ内 destination を監査します。

Docker の「not a directory」は再作成の合図ではなく、ファイルとディレクトリの型不一致です。daemon が見つけられない source をディレクトリとして作った場合もあります。
mount 宣言を固定し、daemon ホストの source、イメージの destination、有効な Mounts の順で確認します。
宣言と daemon の場所を固定
完全なエラー、元コマンド、全 -f、project directory、env ファイルを保存し、docker compose config で結合後の mount を表示します。
docker context show と docker info を記録し、実際の daemon ホストを確認します。remote daemon は client のローカルパスを見ません。
daemon ホストで source の型を証明
source を絶対パスにし、stat で link 自体と参照先を確認して、欠損、ファイル、ディレクトリ、dangling link を記録します。
ファイル名がディレクトリなら、以前の -v が欠損時に作った可能性を確認し、--mount または create_host_path:false で再発を防ぎます。
Compose の基準パスを解決
複数ファイルの相対パスは最初の基準 Compose ファイルから計算し、表示設定と daemon の実パスを比較します。
環境変数の展開も確認します。空の DATA_DIR が root 配下へ向けることがあります。volume や image は削除しません。
イメージ内 destination の型を証明
競合 mount を外した安全な一時 container で destination と親を stat します。起動 script が作る場合は同じ初期化段階で確認します。
設定ファイルなら host file を先に作り file へ、directory tree なら directory へ mount します。layout が誤っている時だけ image を直します。
一度だけ再作成して検証
両端を直した後、対象 container だけ再作成し、Mounts の Type、Source、Destination、read-only を確認します。
元の処理を再実行して container 内から対象を読みます。まだ失敗するなら daemon-host path と image digest を比較します。
