我找不到将Docker运行容器从一台主机移动到另一台主机的方法。
有什么办法可以像将图像一样将容器推到存储库中吗?当前,我没有使用数据卷来存储与在容器内运行的应用程序关联的数据。因此,一些数据驻留在容器内,我想在重新设计设置之前将其保留。
docker save
用于保存图像,而不是容器。docs.docker.com/engine/reference/commandline/save
我找不到将Docker运行容器从一台主机移动到另一台主机的方法。
有什么办法可以像将图像一样将容器推到存储库中吗?当前,我没有使用数据卷来存储与在容器内运行的应用程序关联的数据。因此,一些数据驻留在容器内,我想在重新设计设置之前将其保留。
docker save
用于保存图像,而不是容器。docs.docker.com/engine/reference/commandline/save
Answers:
您无法将正在运行的Docker容器从一台主机移动到另一台主机。
您可以使用将容器中的更改提交到图像docker commit
,将图像移动到新主机上,然后使用来启动新容器docker run
。这将保留您的应用程序在容器内创建的所有数据。
Nb:它不保留存储在卷内的数据;您需要将数据卷手动移动到新主机。
docker stop x
;2.进行更改docker commit -p x x
;3.将容器保存到映像中docker save -o x x
;4.将x文件移动到新主机,并在新主机中加载新映像dokcer load -i x
(如果您使用-v
选项启动了容器,则也必须将这些文件移动到新主机中);5.使用docker run (-v is required to mount these files if needed)
或者,如果您不想推送到存储库:
将容器导出到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
根据另一个答案中的建议,导出和导入不会导出端口和变量,而这可能是容器运行所必需的。当您尝试将其加载到另一台计算机上时,可能会遇到诸如“未指定命令”之类的东西。
因此,保存和导出之间的区别在于,save命令使用历史记录和元数据保存整个图像,而export命令仅导出文件结构(不包含历史记录或元数据)。
不用说,如果您已经在进行导入的docker hyper-visor上已经占用了这些端口,那么其他一些docker容器将导致冲突,并且必须重新配置暴露的端口。
从Docker文档中:
docker export
不导出与容器关联的卷的内容。如果将卷安装在容器中现有目录的顶部,docker export
则将导出基础 目录的内容,而不是卷的内容。 有关在卷中导出数据的示例,请参考用户指南中的备份,还原或迁移数据卷。
使用此脚本: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
我为此尝试了许多解决方案,而这是对我有用的解决方案:
1.将容器提交/保存到新图像:
ps:“我们的容器CONTAINER_NAME的挂载卷位于'/ var / home'”(您必须检查容器以指定其卷路径:#docker inspect CONTAINER_NAME)
现在,当您查看$ {pwd} / backup时,将以tar格式找到我们的卷。
到目前为止,我们有容器的图像“ IMAGE_NAME.tar”及其卷“ volume_backup.tar”。
现在,您可以在新主机上重新创建相同的旧容器。