私は自分のマシンで開発するためにいくつかのサービスをドッキングしようとしていますが、どのように_docker run --volume=..
動作します。たとえば、次のようなことをすると
docker run --volume=/path/to/data:/data [...]
/path/to/data
ローカルに(再)作成されるのみ存在しない場合初期データはコンテナの画像からコピーされていますか?
関連ドキュメントへのリンクをいただければ幸いです。
--volume
オプションは、 docker run
リファレンスドキュメント で説明されており、専用の Managedコンテナ内のデータ ドキュメント。 マウントのバインド ドキュメントに転送します。
そこで、それは言います:
-v
または--volume
を使用して、Dockerホストにまだ存在しないファイルまたはディレクトリをバインドマウントすると、-v
がエンドポイントを作成します。常にディレクトリとして作成されます。
はい、ホスト上のディレクトリFSは、まだ存在しない場合にのみ作成されます。
同時に、Dockerはイメージからバインドマウントされたボリュームに何もコピーしないため、マウントパスはコンテナー内の空のディレクトリとして表示されます。画像にあったものはすべて隠されます。
元のデータをコピーする必要がある場合は、この機能を自分で実装する必要があります。幸いなことに、それは非常に簡単です。
RUN mv /data /original-data
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ['/entrypoint.sh']
スクリプト entrypoint.sh
は次のようになります(簡単な例)。
#!/bin/bash
set -e
SOURCE_DIR=/original-data
TARGET_DIR=/data
if [ $(find $TARGET_DIR -maxdepth 0 -type d -empty) 2>/dev/null) ]; then
cp -r --preserve-all $SOURCE_DIR/* $TARGET_DIR/
fi
# continue Docker container initialization, execute CMD
exec $@
画像にエントリポイントスクリプトが既にある場合は、適切なロジックを追加するだけです。