ドキュメントを検索しましたが、何も表示されなかったので、テストする時間です。しかし、すぐに将来の参考のために...
ホストフォルダーにはコンテナーフォルダーの内容が入力されていますか?
それは反対ですか?
両方のフォルダの内容がマージされていますか? (その場合:同じ名前のファイルが両方のフォルダーにあるとどうなりますか?)
それともエラーが発生しますか?エラーは起動時にスローされますか、それともコンテナ上の既存のデータが入力されたフォルダを指すVOLUMEを使用してイメージを構築しようとしたときにスローされますか?
また、ドキュメントにない別のこと:コンテナの起動時に-vを使用するために、DockerfileでコンテナパスをVOLUMEとして定義する必要がありますか、それともその場でボリュームを作成できますか?
コンテナを実行してホストからボリュームをマウントすると、コンテナに表示されるのはホスト上にあるものだけです。ボリュームマウントはホストディレクトリを指しているため、イメージ内のディレクトリに何かがあった場合はバイパスされます。
このDockerfileからのイメージを使用して:
FROM ubuntu
WORKDIR /vol
RUN touch /vol/from-container
VOLUME /vol
ホストマウントなしで実行すると、イメージの内容がボリュームにコピーされます。
> docker run vol-test ls /vol
from-container
ただし、ホストからボリュームをマウントすると、ホストのコンテンツのみが表示されます。
> ls $(pwd)/Host
from-Host
> docker run -v $(pwd)/Host:/vol vol-test ls /vol
from-Host
いいえ、VOLUME
命令は必要ありません。動作はそれがなくても同じです。
ホストにマウントされたボリュームでDockerコンテナが作成されるときはいつでも、例:
docker run -v /path/on/Host:/data container-image
イメージビルドプロセスのためにすでに/data
にあるコンテンツは常に完全に破棄され、現在/path/on/Host
にあるものが代わりに使用されます。 (/path/on/Host
が存在しない場合、空のディレクトリとして作成されますが、その動作の一部の側面は現在非推奨になっている可能性があります。)
DockerfileでボリュームをVOLUME
で事前定義する必要はありません。 VOLUME
が行うのは、イメージから実行されるコンテナに暗黙の-v /volume/path
(ホストマウントパスがないことに注意)引数をdocker run
コマンドに追加することだけです。これは、明示的な-v /Host/path:/volume/path
が使用されている場合は無視されます。