零基础Docker容器迁移备份实战指南:从导出到恢复全流程

前置准备


在开始 Docker容器迁移备份 之前,请确保你已经满足以下条件:



  • 一台装有Docker的源服务器(如CentOS、Ubuntu等),Docker版本 >= 19.03。

  • 一个正在运行的容器(建议先停止,避免写操作导致数据不一致)。

  • 目标服务器(也需安装Docker,且网络可通或通过U盘拷贝文件)。

  • 基础命令认知:知道如何通过SSH登录服务器,会使用 lscd 等简单命令。


如果你还没有Docker环境,可以在宝塔面板中点击「软件商店」→「Docker」一键安装,或执行:

curl -fsSL https://get.docker.com | bash -s docker

分步操作


第一步:将容器保存为镜像



  1. 查看正在运行的容器名称(假设你的容器叫 myapp):


   docker ps


  1. 可选:停止容器(避免迁移过程中有写入):


   docker stop myapp


  1. 使用 docker commit 将容器当前状态打包为新镜像:


   docker commit myapp myapp_backup:latest

这会在本地生成一个名为 myapp_backup 的新镜像。


第二步:导出镜像为文件


使用 docker save 将镜像导出为 .tar 文件:


docker save -o myapp_backup.tar myapp_backup:latest

完成后你会得到一个 myapp_backup.tar 文件(通常几十到几百MB)。


第三步:传输文件到目标服务器


根据你的实际环境选择传输方式:



  • 同一局域网:使用 scp 命令将文件复制到目标服务器(假设目标IP是192.168.1.100):


  scp ./myapp_backup.tar root@192.168.1.100:/root/


  • 离线环境:通过U盘拷贝,或使用 wget / rsync 等工具。


第四步:在目标服务器上加载镜像


登录目标服务器,执行:


docker load -i /root/myapp_backup.tar

docker images 确认镜像已出现:


docker images | grep myapp_backup

第五步:启动新容器


根据原容器的启动参数重新运行容器。

如果不记得原参数,可通过 docker inspect 在新机器上查看(需先从老机器导出inspect信息),这里给出通用示例:


docker run -d --name myapp_new -p 8080:80 myapp_backup:latest

注意:如果原容器挂载了数据卷(volume),请先在新机器上创建相同路径的卷或目录(参考下文避坑指南)。

可选:直接备份并恢复数据卷


如果你的容器使用了 具名卷,可以借助以下命令备份:


docker run --rm -v myapp_data:/source -v $(pwd):/backup alpine tar czf /backup/data_backup.tar.gz -C /source .

然后在目标机器上恢复:


docker run --rm -v myapp_data:/target -v $(pwd):/backup alpine tar xzf /backup/data_backup.tar.gz -C /target

避坑指南



  • docker commit 不包含数据卷(volume):挂载在主机的目录或命名卷不会被打包进镜像,必须单独备份。

  • docker export vs docker saveexport 导出的是容器文件系统,不保留镜像层和元数据,推荐使用 save/load 组合。

  • 传输文件权限问题:确保目标服务器有写入权限,如果使用 scp 要确认 SSH 密钥或密码正确。

  • 网络映射冲突:新机器上如果原端口已占用,需换成其他端口,或先停掉冲突服务。

  • 容器启动后立即退出:检查日志 docker logs myapp_new,多半是缺少环境变量或挂载卷路径不存在。


效果验证



  1. 检查容器状态


   docker ps -a | grep myapp_new

显示 Up 即运行中。



  1. 访问应用:如果你的容器运行的是一个Web服务,用浏览器打开 http://目标IP:映射端口,确认页面正常。

  2. 验证数据完整性:如果迁移前容器内有数据库或文件,登录容器确认数据存在:


   docker exec -it myapp_new bash

进入容器后检查相关文件或数据库表

高频问题解答


Q1:容器迁移后数据卷里的数据丢失了怎么办?

A:这是因为 docker commit 不保存数据卷。请提前使用 docker run --rm -v 卷名:/source -v 备份路径:/backup alpine tar 单独备份数据卷,然后在目标机器恢复。


Q2:迁移多个容器时有没有批量方法?

A:可以写一个简单脚本,循环 docker ps -a --format "{{.Names}}" 来挨个 commit 和 save。但要注意保证容器名不重复。


Q3:是否可以迁移不同版本Docker的容器?

A:使用 save/load 方式兼容性较好,但跨大版本(如19.x到24.x)可能会遇到兼容问题,建议先在测试环境验证。


Q4:迁移后IP地址变了,容器内部连接数据库的配置要改吗?

A:如果数据库也随容器迁移且使用了容器内部网络别名,则不需要改;如果数据库IP是写死的,则需修改配置文件(建议用环境变量或外部配置文件挂载)。


如果你正在处理 Docker容器迁移备份,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
WordPress新手必看:这些WP插件推荐必备,少一个都后
下一篇
零基础也能远程管理服务器:宝塔面板手机APP运维全攻略
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意