我找不到将运行 docker 的容器从一个主机移动到另一个主机的方法。
有什么方法可以将容器推送到存储库,就像我们对图像所做的那样?目前,我没有使用数据卷来存储与容器内运行的应用程序相关的数据。所以一些数据驻留在容器中,我想在重新设计设置之前保留这些数据。
我找不到将运行 docker 的容器从一个主机移动到另一个主机的方法。
有什么方法可以将容器推送到存储库,就像我们对图像所做的那样?目前,我没有使用数据卷来存储与容器内运行的应用程序相关的数据。所以一些数据驻留在容器中,我想在重新设计设置之前保留这些数据。
或者,如果您不想推送到存储库:
将容器导出到 tarball
docker export <CONTAINER ID> > /home/export.tar
将您的压缩包移动到新机器
导入回来
cat /home/export.tar | docker import - some-name:latest
您不能将正在运行的 docker 容器从一台主机移动到另一台主机。
您可以使用 将容器中的更改提交到映像docker commit
,将映像移动到新主机上,然后使用 启动新容器docker run
。这将保留您的应用程序在容器内创建的所有数据。
注意:它不保留存储在卷内的数据;您需要手动将数据卷移动到新主机。
经过大量令人困惑的手册和令人困惑的教程之后,最终对我有用的东西是:
docker save image_name > image_name.tar
cat image_name.tar | docker load
如另一个答案中所建议的,导出和导入不会导出容器运行可能需要的端口和变量。你最终可能会得到诸如“未指定命令”之类的东西......当你尝试将它加载到另一台机器上时。
因此,save 和 export 之间的区别在于 save 命令将整个图像与历史和元数据一起保存,而 export 命令仅导出文件结构(没有历史或元数据)。
不用说,如果您已经在正在执行导入的 docker hyper-visor 上使用了这些端口,那么通过其他一些 docker 容器,您最终会发生冲突,并且您将不得不重新配置暴露的端口。
注意:为了使用 docker 移动数据,您可能在某处拥有持久存储,它也应该与容器一起移动。
使用此脚本: https ://github.com/ricardobranco777/docker-volumes.sh
这确实保留了卷中的数据。
示例用法:
# 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
来自 Docker 文档:
docker export
不导出与容器关联的卷的内容。如果卷安装在容器中现有目录的顶部,docker export
将导出底层 目录的内容,而不是卷的内容。有关在卷中导出数据的示例,请参阅用户指南中的备份、恢复或迁移数据卷 。
我为此尝试了许多解决方案,这是对我有用的解决方案:
1.提交/保存容器到新图像:
ps:“我们的容器 CONTAINER_NAME 在 '/var/home' 有一个已安装的卷”(您必须检查您的容器以指定其卷路径:# docker inspect CONTAINER_NAME)
现在,当您查看 ${pwd}/backup 时,您会发现我们的卷采用 tar 格式。
到目前为止,我们已经有了容器的映像“IMAGE_NAME.tar”和它的卷“volume_backup.tar”。
现在您可以在新主机上重新创建相同的旧容器。
码头出口 | gzip > .tar.gz
#new 主机 gunzip < /mnt/usb/.tar.gz | 码头进口 -
docker run -i -p 80:80 /bin/bash