1.备份容器
(1)docker ps 命令查看当前Docker在运行的容器
(2)以下内容以迁移id为“0bcd501d61ed”的容器为例
执行命令 docker commit -p 要迁移的容器id 自定义镜像名称(执行此命令会将容器打包出一个新的镜像,这个名称是新镜像的名称)
-p参数:容器暂停运行
此时执行 docker images 命令可以看到新镜像
2.打包镜像
我在这里是将镜像打包成tar包,然后通过文件传输把tar包传输到新的服务器上进行恢复从而完成迁移。
还有一种是直接将新镜像push上注册中心,然后新服务器直接拉就行了。(这种还没有尝试过)
(1)执行 docker save -o 目标文件夹路径/自定义文件名称 镜像名称或id
将镜像打包到目标文件夹(目标文件夹记得提前创建)
(2)通过文件传输把tar包传输到目标服务器某路径(我放在~/docker_backup下)
3.加载镜像
(1)在目标服务器执行 docker load -i tar包所在文件夹路径(我放在了~/docker_backup下) 命令加载镜像
(2)此时执行 docker images 命令会发现Docker中多了一个名为none的镜像,这个就是刚刚加载的迁移过来的镜像。(名为none是因为打包的文件名称不规范导致的 - 2020.9.2更新:后来发现不是这个问题。是因为:
正确:docker save repository:tag -o repository.tar
错误:docker save IMAGE ID -o repository.tar(会导致载入镜像后名字标签都为none),在下面ps部分补充说明)
附上为镜像改名的命令:
docker tag 镜像id 自定义镜像名称:自定义tag名称
ps: 解决docker load命令后镜像名称和标签名为none的问题:
- 镜像打包时文件命名形式: 自定义镜像名称:ag标签名称.tag (Linux文件名可带冒号)。 - ?我在原服务器将tar包按这样规范命名后,使用xftp软件传输时一直传输失败待解决
- 或者tar包传输到目标服务器后,再修改tar包名为上面的形式。
- 以上方法解决不了 执行 ‘docker tag 镜像id 镜像名称:tag名称 ’修改吧😂
2020.9.2更新:
正确:docker save repository:tag -o repository.tar
错误:docker save IMAGE ID -o repository.tar(会导致载入镜像后名字标签都为none)