
私のファイルにある、ボリュームマウントを設定する次のYAMLコードdocker-compose.yml
(バージョン3.7を使用)を検討してください。短縮構文ドキュメントに指定されているとおり:
volumes:
- ./logging:/var/log/cron
logging
これにより、ホスト マシン上の相対パスが/var/log/cron
コンテナー内のフォルダーにマップされます。 を実行するとdocker-compose up
、logging
ホスト マシン上にフォルダーが存在しない場合は、Docker によって作成されます。これですべて完了です。
さて、上記を次のように変更すると長い形式の構文:
volumes:
- type: bind
source: ./logging
target: /var/log/cron
を実行すると、ホストマシン上に存在しない場合はフォルダdocker-compose up
が作成されません。logging
Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'
短い形式の構文では、ホスト パスが存在しない場合にホスト パスが作成されるのに、長い形式ではホスト パスが作成されず、エラーが発生する理由を知っている人はいますか?
Windows 用 Docker Desktop の使用。
答え1
これは実際には、古い構文の「機能」(バグ)であり-v
、その動作に依存して作成された何千(何百万?)もの実装がすべて壊れてしまうため、修正したくありませんでした。
Docker Swarm 用に導入され、その後、元の Docker CLI 呼び出しと互換性を持つように拡張された新しい--mount
ボリューム構文では、この機能は明示的に再導入されませんでした。これは、実際には文書化されておらず、依存すべきではない「予期しない魔法」であったためです。