手把手教你Docker容器迁移备份:从导出到恢复全流程

前置准备


进行 Docker容器迁移备份 之前,请确保你具备以下条件:



  • 两台服务器都已安装 Docker(版本 ≥ 19.03)。

  • 源服务器和目标服务器之间网络可达(建议使用 SSH 或 scp)。

  • 确认目标服务器磁盘空间足够存放镜像和备份文件。

  • 准备一个测试容器(例如 nginx)用于演练。


如果你使用的是宝塔面板,可以直接在“Docker”模块中找到容器列表和镜像管理入口,但本文命令通用所有环境。

分步操作


1. 备份正在运行的容器(提交为镜像)


如果你的容器内有数据改动(比如配置文件、程序更新),先用 docker commit 将当前容器保存为新镜像。


# 查看容器ID或名称
docker ps

提交容器为镜像 - 示例:my_nginx:20250415

docker commit <容器名或ID> my_nginx_backup:latest


2. 导出镜像为 tar 文件


使用 docker save 把镜像压缩打包:


# 导出镜像为 tar 文件
docker save -o my_nginx_backup.tar my_nginx_backup:latest

3. 备份数据卷(如果使用了数据卷)


数据卷中的内容不会包含在镜像里,需要单独打包。

进入数据卷宿主机目录,用 tar 压缩:


# 查看数据卷挂载路径,假设挂在 /var/lib/docker/volumes/nginx_data
docker inspect <容器名> | grep Mounts

进入数据卷目录并打包(路径根据实际替换)

sudo tar -czf nginx_data_backup.tar.gz /var/lib/docker/volumes/nginx_data/_data


4. 将备份文件传输到目标服务器


scp 复制(假设目标IP为 192.168.1.200,目标路径为 /tmp/):


# 传输镜像和数据卷备份文件
scp my_nginx_backup.tar root@192.168.1.200:/tmp/
scp nginx_data_backup.tar.gz root@192.168.1.200:/tmp/

5. 在目标服务器上导入镜像并启动容器


登录到目标服务器,执行:


# 1. 导入镜像
docker load -i /tmp/my_nginx_backup.tar

2. 恢复数据卷(如果之前备份了)

mkdir -p /var/lib/docker/volumes/nginx_data/_data
sudo tar -xzf /tmp/nginx_data_backup.tar.gz -C /var/lib/docker/volumes/nginx_data/_data

3. 根据原镜像创建并启动容器(注意端口映射等参数)

docker run -d --name restored_nginx -p 8080:80 my_nginx_backup:latest


说明:如果容器当初使用了 --mount 绑定挂载,恢复时也需要指定相同的路径映射。

避坑指南



  • 不要直接迁移容器 ID:容器是运行时环境,直接复制 /var/lib/docker/containers/ 目录不可取,应使用镜像+数据卷方式。

  • 数据卷遗漏:很多新手只备份镜像,忽略数据卷,导致数据库、配置文件丢失。务必确认数据卷路径。

  • 端口冲突:目标服务器上原有容器占用了相同端口,启动新容器会失败,请提前规划端口映射。

  • 镜像标记丢失:导入后镜像名称和标签可能与原来不同,使用 docker images 检查,并用 docker tag 修正。


高频问题解答


问题1:迁移后容器无法启动,提示 "OCI runtime create failed" 怎么办?

答:通常是宿主机内核或系统调用差异导致。可尝试在目标服务器更新 Docker 版本,或使用 --privileged 参数启动容器。


问题2:如何只备份部分文件,而不提交整个镜像?

答:使用 docker cp 将特定文件从容器复制到宿主机,再压缩传输。例如:docker cp <容器名>:/app/config.ini ./


问题3:数据卷很多,有没有一键备份的脚本?

答:可以写一个简短脚本遍历所有数据卷路径并打包,但建议逐卷确认。注意:Docker 官方推荐使用 --volumes-from 或挂载临时容器来备份。


效果验证



  1. 在目标服务器执行 docker ps,确认 restored_nginx 容器状态为 Up。

  2. 访问目标服务器IP+端口(例如 http://192.168.1.200:8080),预期显示与源服务器一致的页面。

  3. 进入恢复后的数据卷目录,检查文件完整性:


   ls /var/lib/docker/volumes/nginx_data/_data


  1. 对比源服务器的数据内容和更新时间,确保迁移无误。


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

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

分享到:
上一篇
宝塔Docker管理器使用教程:从安装到部署容器全流程
下一篇
服务器被挖矿病毒处理:服务器被挖矿病毒了怎么办?从定位到清除
1
系统公告

泽御云五一特惠活动🔥

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