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文件,节省磁盘空间。