ボリュームの名前を指定せずにdockerコマンドラインを使用してdockerイメージを試しました。今、私はこのコンテナ/イメージを引き続き使用したいが、Docker Composeでコンテナを定義することで見つけました。
匿名/無名ボリュームからのデータを保持し、それらをdocker composeによって作成された新しいコンテナーで使用するためのベストプラクティスとは何ですか?
現在、既存のボリュームの名前を変更することはできません。 (これは、以前に名前が付けられていても名前が付けられておらず、名前が自動生成されていても同じです。)
この機能の実装の詳細については この問題 を参照し、「+ 1」/「賛成」を追加して、開発者にそのことを知らせてください。
それがなければ、私の知る限り、新しい名前付きボリュームを作成してデータをコピーするのが唯一の良い方法です。
これを書いている時点では、唯一のオプションはデータをコピーすることです。詳細は、特定のセットアップによって異なる場合があります。実行されるステップの一般的なリストは次のとおりです。
ソースコンテナーを停止して削除し、手順3で新しいボリュームを作成します。
docker stop NAME
docker rm NAME
# or
docker-compose stop SERVICE
docker-compose rm SERVICE
場合によっては、ソースコンテナの削除を延期できることがあります。 docker-compose
匿名ボリュームからdocker-compose
名前付きボリュームに切り替えるとき。この場合、up
は新しいボリュームを作成します。そして、データのコピーを続行できます。ただし、この場合でも、コピー中にデータが変更されないように、コンテナーを停止することをお勧めします。また、docker-compose
のソースコンテナーを削除して、新しいボリュームに切り替える必要があります(警告に注意してください)。
場合によっては、それは本当に必要ではありません。スタンドアロンコンテナーからdocker-compose
に切り替える場合。
該当する場合はdocker-compose.yml
を変更します。
作成する新しいボリュームの新しいコンテナーを開始します。
スタンドアロンコンテナ:
docker run ...
# or
docker-compose up -d
データが変更されないように、新しいコンテナーを停止します。
docker stop ...
# or
docker-compose stop
に移行する場合など。名前付きボリュームを持つスタンドアロンコンテナーでは、コンテナーの開始/停止の代わりにボリュームを作成できます。
データをコピーします。
docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \
bash -c '
shopt -s dotglob
# rm -r /to/* # e.g. pg might have populated the new volume
cp -r /from/* /to
'
SRC_VOLUME、DST_VOLUME-ボリューム名、ID、またはホスト上のディレクトリへの絶対パス。
コンテナーに接続されているボリュームを一覧表示するには、次のコマンドを使用します。
docker inspect CONTAINER --format '{{json .Mounts}}' | jq
ここでCONTAINER-コンテナ名またはID。
新しいコンテナを起動します。
docker run ...
# or
docker-compose up -d
喜んでください:)
さまざまな設定を試してみたい場合は、次の Gist を確認してください。