图片:
docker save -o /root/bkp1/docker_image_bkp ccn/ccn-server:1.0.4
容器:
docker export cef0dff04e70 > /root/bkp1/container.tar
在新服务器中:
docker load -i /root/pmmbkp1/docker_image_bkp
cat /root/bkp1/container.tar | docker import - ccdata
我创造并开始了它。但我无法在新服务器中找到旧数据。如何将历史数据与容器一起移动?
答案 0 :(得分:0)
目前(2016年9月),pet
或docker save
甚至docker export
无法生成tar文件,其中包含容器内安装的卷中包含的任何数据。
简而言之,如果您希望将卷数据从一个服务器移动到另一个服务器,最好的方法是使用共享文件系统来存储docker容器的数据。请查看Mount a shared-storage volume as a data volume文档。
为Docker群集创建共享存储后,可以在原始服务器中停止旧容器,然后使用相同的配置在另一台服务器中启动新容器。旧容器和新容器都应安装与共享存储系统中存在的卷相同的卷。
数据持久性仍然是Docker的编排系统中的一个问题。但是另一个编排工具Kubernetes 1.4现在支持Persistent Volumes。
编辑:
如果您的容器已在运行并且您想要移动它,您可以尝试执行以下步骤:
将原始容器保存到docker commit
或docker save
的图片中。然后将保存的图像加载到新服务器。
检查原始容器的挂载点,然后使用挂载点配置查找本地卷文件。例如,使用docker commit
,您可以找到与此类似的内容:
" Mounts":[
docker inspect
],
您可以在此处看到挂载点为{
"Name": "95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a",
"Source": "/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
将本地卷文件复制到新服务器。
在新服务器中启动一个新容器,其中新容器应将原始本地卷文件的副本装入其中。您可以使用"/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data"
命令的docker run
参数来实现它。
您可能需要考虑使用相同的配置在新服务器中启动新容器。 -v
命令可以帮助您找到容器的配置以及挂载点配置。
上述解决方案可能看起来很复杂和丑陋,但除非您使用共享存储,否则没有其他方法可以轻松移动容器。