Docker容器迁移备份从入门到实操:三步迁移完整指南

Docker容器迁移备份从入门到实操:三步迁移完整指南


不少朋友在换服务器或升级环境时,最头疼的就是怎么把正在跑的Docker容器原封不动搬过去。

其实Docker容器迁移备份并没有想象中复杂,只要抓住镜像和数据卷两个核心,几步命令就能搞定。

今天我就从零开始,带你把一台服务器上的容器完整迁移到另一台机器上。


前置准备


在开始操作前,先确认以下条件齐备:



  • 源服务器:已安装Docker 19.03以上版本(用 docker version 查看)。

  • 目标服务器:同样安装Docker,且与源服务器网络互通(至少能通过scp或USB拷贝文件)。

  • SSH工具:推荐使用Xshell或Terminus,方便远程执行命令。

  • 磁盘空间:确保目标服务器有足够空间存放导出的镜像包(建议保留容器数据卷总大小的1.5倍)。


注意:如果容器里挂着外部存储(如NFS)或数据库,建议先在源服务器上用 docker commit 将容器转为镜像再导出,避免数据不一致。

分步操作


第一步:导出Docker镜像


在源服务器上执行以下命令,查看当前所有容器:


docker ps -a

假设你要迁移的容器名为 myapp,先用 docker commit 将容器保存为新镜像(保留运行时状态):


docker commit myapp myapp-migrate:latest

然后将镜像打包成tar文件:


docker save -o myapp-migrate.tar myapp-migrate:latest

导出的tar文件会保存在当前目录。

可以用 ls -lh myapp-migrate.tar 查看大小。


第二步:迁移数据卷(可选但推荐)


如果容器使用了数据卷,还需要单独迁移它们。

先查看容器挂载的数据卷:


docker inspect myapp | grep -A5 "Mounts"

例如发现挂载点为 /var/lib/docker/volumes/myapp_data/_data,那么可以在源服务器上打包该目录:


tar -czf myapp_data.tar.gz -C /var/lib/docker/volumes/myapp_data/_data .

将生成的tar包和之前的镜像tar包一起拷贝到目标服务器(如通过scp):


scp myapp-migrate.tar myapp_data.tar.gz user@目标服务器:~/

第三步:在目标服务器恢复


登录目标服务器,先加载镜像:


docker load -i myapp-migrate.tar

docker images 确认 myapp-migrate 镜像已存在。

然后恢复数据卷(如果有):


mkdir -p /var/lib/docker/volumes/myapp_data/_data
tar -xzf myapp_data.tar.gz -C /var/lib/docker/volumes/myapp_data/_data

最后运行容器,记得映射同样的端口和挂载点:


docker run -d -p 8080:8080 -v myapp_data:/app/data --name myapp-new myapp-migrate:latest

效果验证:使用 docker ps 确认容器运行状态,再用浏览器或 curl 访问应用的端口,确认业务正常。


避坑指南



  • 权限问题:恢复数据卷时,确保目标服务器的目录权限与源服务器一致(可用 chown -R 1000:1000 调整,具体UID需查看容器内进程)。

  • 容器名称冲突:目标服务器上不能有同名的容器,恢复前先 docker rm -f oldcontainer

  • 跨平台架构:如果源服务器是x86_64,目标服务器是arm64(如树莓派),导出的镜像可能无法直接运行,需要在源服务器上先用 docker buildx 构建多架构镜像。

  • 网络配置丢失**:docker run 时记得添加 --network 参数(如 --network bridge),否则新容器可能无法访问外部服务。


高频问题解答


Q1:迁移数据卷时,容器必须停止吗?

A:强烈建议先 docker stop myapp 再打包数据卷,避免写操作导致数据不一致。不影响镜像导出。


Q2:导出的tar文件太大了,怎么压缩?

A:可以用 gzip 压缩:docker save myapp-migrate | gzip > myapp-migrate.tar.gz,然后拷贝后再解压加载(gunzip -c myapp-migrate.tar.gz | docker load)。


Q3:迁移后容器启动失败,提示“exec format error”

A:通常是因为跨CPU架构导致。需要在源服务器上重新构建兼容多架构的镜像,或者改用 docker container export(仅导出文件系统,不保留包含架构信息的层)。


效果验证


完成迁移后,建议执行以下检查清单:



  • [ ] 目标服务器上 docker ps 显示容器正在运行(STATUS为Up)。

  • [ ] 使用 docker logs myapp-new --tail 20 查看最后20行日志,无ERROR。

  • [ ] 访问应用端口(如curl http://localhost:8080),返回正常响应。

  • [ ] 数据完整性检查:如果应用有用户数据,登录系统验证数据是否完整。


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

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

迁移成功后别忘了清理源服务器上残留的临时tar文件,节省磁盘空间。

分享到:
上一篇
WordPress集成AI写作
下一篇
宝塔面板CPU内存优化:零基础也能立竿见影的5步实战
1
系统公告

泽御云五一特惠活动🔥

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