まず解決済みのマウント元とマウント先を確認し、ホストパスが空なのか、アプリケーションが初期化されていない、または権限がないのかを区別します。
再作成したコンテナを開いたときに、ユーザー、ライブラリ、データベース、以前の設定が何もない場合、この判断が重要になります。競合する状態は、誤った、空の、または別のマウントに隠れているマウントと、マウントは正しいものの初期化またはアクセスに失敗している状態です。保存済みの設定と使い捨てデータから始め、一度に1つの分岐だけを観察し、データ損失、権限、可用性のリスクが拡大する場合はテストを中止します。
誤った、空の、または別のマウントに隠れているマウントと、正しいマウントだが初期化またはアクセスに失敗している状態を分ける
変更する前に環境を記録します。ソフトウェアとファームウェアのバージョン、デバイスID、マウントまたはネットワークパス、空き容量、権限、確認できる症状を記録してください。基準状態には、再作成したコンテナを開いたときにユーザー、ライブラリ、データベース、以前の設定が何もない状態を再現できるだけの詳細を残す必要があります。
最初の候補は、誤った、空の、または別のマウントに隠れているマウントです。2つ目は、マウントは正しいものの初期化またはアクセスに失敗している状態です。現在のDockerのバインドマウントの動作は、テストで使用する仕組みまたはコマンドの境界を定義するものであり、このホームサーバー固有の観察に取って代わるものではありません。
判別テストを実行する前に、合格条件と中止条件を書き出します。合格とは、一方の分岐が予測した証拠が変化し、関係のないサービスは変更されないことです。不合格の場合は、推測に基づく修正を連鎖させるのではなく、保存済みの状態に戻せなければなりません。
管理された判別テストを1つ実行する
次の判別テストを使用します。Compose設定とマウントを確認し、ホストパスの内容を比較してから、使い捨ての既知の正常なディレクトリに対してイメージを実行します。変更した変数に結果の原因を帰属できるよう、ワークロード、クライアント、パス、ファイルセット、タイミングを一定に保ちます。
コンテナボリュームの検査を使用して、分岐を実際に切り分けられるフィールドを選びます。そのタイムスタンプ、終了ステータス、エラーテキスト、デバイスまたはスナップショットID、レイテンシ、転送バイト数、権限、復旧状態を記録してください。ID、永続性、アプリケーション状態が検証対象である場合、コマンドが正常終了しただけでは不十分です。
元の条件に再起動、再接続、再マウント、またはキャッシュのコールド化が含まれている場合は、そのイベント後にテストを1回繰り返します。最初の実行が破壊的である、または環境を復元できない場合は中止し、代わりに使い捨てのコピーで再現してください。
docker compose config
docker inspect app --format "{{json .Mounts}}"
証拠がどの分岐を支持するか解釈する
合格: コンテナが文書化されたパスで想定ファイルを認識する、または具体的な初期化・権限エラーをログに記録する。結論が普遍的な主張にならないよう、合格した正確なバージョン、ID、ワークロードを記録し、条件付きの結論として維持します。
不合格: ホスト上にはファイルが存在するものの、別のマウントターゲットに隠れている、またはアプリが別の内部パスに書き込んでいる。不合格だからといって、ネットワーク、メモリ、権限、ソースの整合性が両方の分岐に影響する可能性がある場合に、直ちに反対の分岐が証明されるわけではありません。エスカレーションする前に、これらの共有依存要因を切り分けてください。
例外または曖昧な結果: コンテナを停止し、変更を加える前に疑わしい両方のパスをコピーします。ログを保持し、復元可能なコピーができるまで、修復、整理、破棄、再パーティション、再帰的な所有者変更のコマンドを実行しないでください。
一致する対処を適用し、元の障害を再現する
観察された分岐に一致する対処を適用し、その後、縮小した代替条件ではなく元の条件を繰り返します。コンテナが文書化されたパスで想定ファイルを認識する、または具体的な初期化・権限エラーをログに記録する状態が、2サイクル、または該当する再起動、スリープ、中断、負荷遷移にわたって確認できた場合にのみ、この判断は有効です。
コンテナのユーザーIDを使用して最も近い依存ワークフローを確認しますが、元のトリガーは変更しないでください。関係のないデータセット、共有、コンテナ、ユーザー、復旧ポイントでは、以前のアクセス状態とタイミングを維持する必要があります。
中止の境界は明確です。ホスト上にはファイルが存在するものの別のマウントターゲットに隠れている、またはアプリが別の内部パスに書き込んでいる場合は、最後に検証済みの設定に戻し、証拠を保持します。分岐が再現可能な場合に限り、より深いプラットフォームまたはハードウェアのテストへ進みます。
目的の結果が維持されたら、読み取り専用コンテナルートと比較し、修正によって隣接サービスへリスクを移さないようにします。新たなバックアップ、ID、タイムアウト、可用性の障害が発生した場合、目的のテストが成功していても変更は失敗です。
FAQ
空のコンテナデータを診断する際、残る検索の多くは、空のバインドマウントがイメージファイルを隠せるか、デプロイ後に相対パスが変わる理由、すぐにディレクトリの所有者を変更すべきか、といった内容です。以下の回答では、これらのエッジケースを主要な判断から分けて扱います。
合格条件は変わりません。コンテナが文書化されたパスで想定ファイルを認識する、または具体的な初期化・権限エラーをログに記録することです。後続の条件によってファイルシステム、ID、ネットワークパス、アプリケーションのバージョンが変わる場合は、その変更によって影響を受ける判別テストだけを繰り返します。
ホスト上にはファイルが存在するものの別のマウントターゲットに隠れている、またはアプリが別の内部パスに書き込んでいる場合は、実験を広げるのをやめます。その時点でコンテナを停止し、所有者を変更したりデータを移動したりする前に疑わしい両方のパスをコピーしてください。プラットフォーム、ストレージ、またはハードウェアの担当者へエスカレーションする前に、証拠を保持します。
空のバインドマウントがイメージファイルを隠すことはありますか?
はい。内容が存在するイメージディレクトリにマウントすると、マウント中はイメージの内容が見えなくなります。
デプロイ後に相対パスが変わるのはなぜですか?
Composeはプロジェクトのコンテキストを基準に解決するため、作業ディレクトリや管理ツールが異なると別の場所を指すことがあります。
すぐにディレクトリの所有者を変更すべきですか?
いいえ。まず意図したパスであることを確認し、現在の所有権を記録してください。そうしないと、権限修正によって他のデータを損なう可能性があります。
同じワークロードによって、証拠が「誤った、空の、または別のマウントに隠れているマウント」または「正しいマウントだが初期化またはアクセスに失敗している状態」のどちらかに従い、一致する対処によって元の症状が解消され、別の症状が発生しないことを確認できれば、診断は完了です。どちらの分岐も再現可能な状態を維持できない場合は、ログと保存済みの状態をそのまま保持してください。不確実性はエスカレーションの理由であり、さらに修正を重ねる理由ではありません。
サポートとヒント
もっと読む

名前を変更したデータセットと安定したファイルハンドルのためのNFS移行チェックリスト
ストレージの識別情報が変わるとファイルハンドルも変わる可能性があることを前提としてください。クライアントを停止し、エクスポートを意図的に切り替え、再マウントして、開いているファイルと新規ファイルを検証してください。

Windows、macOS、Linux向けSMBクライアントのトラブルシューティングガイド
各クライアントで同じサーバー、アカウント、共有、ファイル操作を使用し、検出、認証情報、ポリシー、ストレージの障害が混在しないようにします。

アプリ、データベース、バックアップ向けホームサーバーのシークレットローテーションチェックリスト
ローテーションは依存関係の移行として扱い、すべての利用箇所を洗い出し、可能な場合は認証情報を重複配置し、新しい値を検証してから、古い値を無効化し、復旧をテストします。

