我找不到将运行 docker 的容器从一台主机移动到另一台主机的方法。
有什么方法可以像处理图像一样将我的容器推送到存储库吗? 目前,我没有使用数据卷来存储与在容器内运行的应用程序相关的数据。所以一些数据驻留在容器中,我想在重新设计设置之前保留这些数据。
或者,如果您不想推送到存储库:
将容器导出到压缩包
docker export <CONTAINER ID> > /home/export.tar
将你的压缩包移动到新机器
导入回来
cat /home/export.tar | docker import - some-name:latest
您还可以按如下方式移动容器:
停止源主机上的容器。
docker stop x
如果您使用
-v
启动容器,则必须将挂载的文件和目录复制到新主机。
提交您的更改
docker commit -p x x
将容器保存到图像
docker save -o x x
将 x 文件复制到新的目标主机。
连接到目标主机。
加载新图像
docker load -i x
运行新镜像
docker run
请注意,
-v
可能需要引用目标主机上已挂载的文件和目录,以镜像源主机。
您不能将正在运行的 docker 容器从一台主机移动到另一台主机。
docker commit
将容器中的更改提交到图像,将图像移动到新主机上,然后使用 docker run
启动一个新容器。这将保留您的应用程序在容器内创建的任何数据。
注意: 它不保留存储在卷内的数据;您需要手动将数据卷移动到新主机。
在大量令人困惑的手册和令人困惑的教程之后,最终对我有用的是:
将 docker 镜像保存到存档中:docker save image_name > image_name.tar
cat image_name.tar | docker load
等的东西......当你尝试将它加载到另一台机器上时。 因此,保存和导出之间的区别在于保存命令保存整个图像以及历史和元数据,而导出命令仅导出文件结构(没有历史或元数据)。
不用说,如果你已经在你正在导入的 docker hyper-visor 上使用了这些端口,那么你将最终陷入冲突,你将不得不重新配置暴露的端口。
注意:为了使用 docker 移动数据,您可能在某处拥有持久存储,它也应该与容器一起移动。
保存卷中的数据。 用法示例:
# 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.提交/保存容器到新图像:
现在您可以在新主机上重新创建相同的旧容器。
并描述它是如何在幕后工作的?然后自己做。
#新主人 压缩包
docker run -i -p 80:80 /bin/bash< /mnt/usb/.tar.gz | docker import -