テクノロジー · 実用ガイド

Docker の bind mount が「not a directory」?両端の型を先に確認

コンテナ再作成やデータ削除の前に、daemon ホストの source、Compose の基準パス、イメージ内 destination を監査します。

daemon-host source、image destination、有効な Docker mount を示すオリジナル図
オリジナル概念図:両端の型を証明してから有効な mount を確認します。 Watch at Ease

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 を比較します。

Docker の file/directory mount エラーを四原因に分けるオリジナル図
オリジナル概念図:欠損 source、基準パス、remote daemon、destination 不一致を区別します。 Watch at Ease