あるホストから別のホストにコンテナーを実行しているドッカーを移動する方法が見つかりません。
画像の場合のようにコンテナをリポジトリにプッシュする方法はありますか?現在、コンテナ内で実行されているアプリケーションに関連するデータを保存するためにデータボリュームを使用していません。そのため、一部のデータはコンテナ内に存在しますが、セットアップを再設計する前に保持したいものです。
実行中のdockerコンテナをあるホストから別のホストに移動することはできません。
docker commit
を使用してコンテナーの変更をイメージにコミットし、イメージを新しいホストに移動してから、docker run
を使用して新しいコンテナーを開始できます。これにより、アプリケーションがコンテナ内に作成したデータが保持されます。
Nb:ボリューム内に保存されているデータは保存されません。データボリュームを新しいホストに手動で移動する必要があります。
または、リポジトリにプッシュしたくない場合:
コンテナーをtarballにエクスポートします
docker export <CONTAINER ID> > /home/export.tar
Tarballを新しいマシンに移動します
インポートして戻す
cat /home/export.tar | docker import - some-name:latest
紛らわしいマニュアルとわかりにくいチュートリアルの後、Dockerは明らかに 膨らんだ期待のピーク で書いているので、最終的には私にとってはうまくいきました:
docker save image_name > image_name.tar
cat image_name.tar | docker load
別の回答で提案されているように、エクスポートとインポートでは、ポートと変数はエクスポートされません。これらは、コンテナの実行に必要な場合があります。そして、 "No command specified"などのようなものになるかもしれません...別のマシンにロードしようとすると。
したがって、保存とエクスポートの違いは、保存コマンドは画像全体を履歴とメタデータとともに保存するのに対して、エクスポートコマンドはファイル構造のみを(履歴またはメタデータなしで)エクスポートすることです。
Dockerドキュメントから:
docker export
は、コンテナに関連付けられたボリュームのコンテンツをエクスポートしません。ボリュームがコンテナ内の既存のディレクトリの上にマウントされている場合、docker export
は、ボリュームのコンテンツではなく、underlyingディレクトリのコンテンツをエクスポートします。ボリューム内のデータのエクスポートの例については、ユーザーガイドの データボリュームのバックアップ、復元、または移行 を参照してください。
その他の外部ツール:関連するデータボリュームを持つコンテナーを移動するには、Flocker https://clusterhq.com/flocker/introduction/ を使用できます。
このスクリプトを使用します: https://github.com/ricardobranco777/docker-volumes.sh
これはdoesデータをボリュームに保存します。
使用例:
# Stop the container
docker stop $CONTAINER
# Create a new image
docker commit $CONTAINER $CONTAINER
# Save image
docker save -o $CONTAINER.tar $CONTAINER
# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar
# Copy image and volumes to another Host
scp $CONTAINER.tar $CONTAINER-volumes.tar $USER@$Host:
# On the other Host:
docker load -i $CONTAINER.tar
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER
# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar
# Start container
docker start $CONTAINER
私はこれのために多くの解決策を試しましたが、これは私のために働いたものです:
1.コンテナを新しいイメージにコミット/保存します:
ps: "コンテナCONTAINER_NAMEには '/ var/home'にマウントされたボリュームがあります"(コンテナを調べて、ボリュームパスを指定する必要があります。#docker inspect CONTAINER_NAME)
$ {pwd}/backupを見ると、tar形式のボリュームが見つかります。
これまでは、コンテナのイメージ「IMAGE_NAME.tar」とそのボリューム「volume_backup.tar」があります。
これで、新しいホストで同じ古いコンテナを再作成できます。