21

ドキュメントを検索しましたが、何も出てこなかったので、テストする時間です。しかし、簡単な将来の参照のために...

ホスト フォルダーにコンテナー フォルダーのコンテンツが取り込まれていますか?

反対ですか?

両方のフォルダの内容がマージされていますか? (その場合、両方のフォルダに同じ名前のファイルがあるとどうなりますか?)

それともエラーになりますか?エラーは起動時にスローされますか、それともコンテナー上の既存のデータが格納されたフォルダーを指す VOLUME を使用してイメージをビルドしようとするとスローされますか?

また、ドキュメントにない別のこと: コンテナーの起動時に -v を使用するには、Dockerfile でコンテナー パスを VOLUME として定義する必要がありますか、それともオンザフライでボリュームを作成できますか?

4

2 に答える 2

32

コンテナーを実行してホストからボリュームをマウントすると、コンテナーに表示されるのはホスト上にあるものだけです。ボリューム マウントはホスト ディレクトリを指しているため、イメージのディレクトリに何かがあった場合はバイパスされます。

この 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いいえ、指示は必要ありません。なくても動作は同じです。

于 2016-09-22T19:43:29.557 に答える
7

ホストにボリュームがマウントされた状態で 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れます。

于 2016-09-22T19:40:52.050 に答える