我找不到将docker运行容器从一个主机移动到另一个主机的方法。
有没有什么方法可以将我的容器推送到存储库,就像我们为图像做的那样? 目前,我没有使用数据卷来存储与容器内运行的应用程序相关联的数据。所以有些数据驻留在容器中,我想在重新设计设置之前保留它们。
答案 0 :(得分:79)
或者,如果您不想推送到存储库:
将容器导出到tarball
docker export <CONTAINER ID> > /home/export.tar
将tarball移至新机器
将其导回
cat /home/export.tar | docker import - some-name:latest
答案 1 :(得分:41)
您无法将正在运行的docker容器从一个主机移动到另一个主机。
您可以将容器中的更改提交到docker commit
的图像,将图像移动到新主机上,然后使用docker run
启动新容器。这将保留应用程序在容器内创建的所有数据。
Nb:它不会保留存储在卷内的数据;您需要手动将数据卷移动到新主机。
答案 2 :(得分:17)
由于Docker显然是在peek of inflated expectations写作的时候,因此最终对我有用,经过多次令人困惑的手册和令人困惑的教程,是:
docker save image_name > image_name.tar
cat image_name.tar | docker load
导出和导入,如另一个答案所建议的那样,不会导出容器运行所需的端口和变量。你可能会得到像“没有指定命令”之类的东西......当你试图在另一台机器上加载它时。
因此,保存和导出之间的区别在于save命令使用历史记录和元数据保存整个图像,而export命令仅导出文件结构(没有历史记录或元数据)。
答案 3 :(得分:16)
来自Docker文档:
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
不会导出相关卷的内容 与容器。如果卷安装在现有卷上 容器中的目录if (offsetTop != null && this.affixed == 'top') return scrollTop <= offsetTop ? 'top' : false
将导出内容 底层目录,而不是卷的内容。参考 到Backup, restore, or migrate data volumes 在用户指南中有关导出卷中数据的示例。
其他外部工具: 要移动容器及其关联的数据卷,您可以使用Flocker https://clusterhq.com/flocker/introduction/
答案 4 :(得分:2)
使用此脚本: 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
答案 5 :(得分:0)
我为此尝试了许多解决方案,而这正是对我有用的解决方案:
1.commit /将容器保存到新图像:
ps:“我们的容器CONTAINER_NAME的挂载卷位于'/ var / home'”(您必须检查容器以指定其卷路径:#docker inspect CONTAINER_NAME)
现在,当您查看$ {pwd} / backup时,将以tar格式找到我们的卷。
到现在为止,我们有容器的图像“ IMAGE_NAME.tar”及其卷“ volume_backup.tar”。
现在,您可以在新主机上重新创建相同的旧容器。
答案 6 :(得分:0)
码头出口| gzip > .tar.gz
#新主机 gunzip < /mnt/usb/.tar.gz |码头工人进口 -
docker run -i -p 80:80 /bin/bash