文章内容
2025/12/4 19:25:00,作 者: 黄兵
Docker 迁移
Docker 的“迁移”可以有几种不同的含义,所以我先帮你区分清楚几种场景,再给出具体操作方式 👇
🧭 一、确定你的迁移目标
| 迁移目标 | 示例 | 推荐方案 |
|---|---|---|
| 迁移容器到另一台机器 | 从 A 服务器迁移容器(含数据卷)到 B | 使用 docker commit + save / load 或 docker export / import |
| 迁移镜像到另一台机器 | 把本地镜像搬到另一台机器 | 使用 docker save + docker load |
| 迁移整个 Docker 环境(含容器、镜像、卷、网络等) | 整机迁移或备份恢复 | 复制 /var/lib/docker 目录(需停服务)或使用 docker-compose 重建 |
| 迁移数据卷(Volume) | 容器数据保存点迁移 | 使用 docker run --volumes-from 或直接拷贝 /var/lib/docker/volumes/ |
🧩 二、常见迁移方式详细说明
1️⃣ 迁移镜像
在源服务器执行:
docker save -o myimage.tar myimage:latest
将生成 myimage.tar 文件,然后复制到目标机器:
docker load -i myimage.tar
✅ 镜像即被恢复。
2️⃣ 迁移容器(含运行状态)
方法一(推荐):
# 1. 将容器保存为镜像 docker commitmycontainer_image # 2. 保存镜像到文件 docker save -o mycontainer.tar mycontainer_image # 3. 拷贝到目标机器 scp mycontainer.tar root@target_host:/root/ # 4. 在目标机器加载并启动 docker load -i mycontainer.tar docker run -d --name mycontainer -p 8080:80 mycontainer_image
方法二(只迁移文件系统,不带环境配置):
docker export -o mycontainer.tar# 导入 cat mycontainer.tar | docker import - mycontainer_image
⚠️ docker export 不保留容器的元数据(如端口映射、卷、环境变量)。
3️⃣ 迁移数据卷
如果你的容器使用了挂载卷,例如:
docker run -v mydata:/data myimage
则可在源服务器执行:
docker run --rm -v mydata:/from -v /backup:/to alpine ash -c "cd /from && cp -av . /to"
这会将卷 mydata 的内容复制到 /backup 文件夹。
然后在目标服务器上执行:
docker run --rm -v /backup:/from -v mydata:/to alpine ash -c "cd /from && cp -av . /to"
4️⃣ 整机迁移(最彻底)
适用于完整 Docker 服务环境迁移(含镜像、容器、卷、网络)
步骤:
- 停止 Docker 服务
sudo systemctl stop docker
- 复制整个目录
rsync -aP /var/lib/docker/ root@target_host:/var/lib/docker/
- 启动目标机器上的 Docker
sudo systemctl start docker
⚠️ 这种方法要求 源和目标 Docker 版本一致,否则可能无法启动容器。
5️⃣ 使用 docker-compose(最方便的迁移方式)
如果你的项目用 docker-compose.yml 管理,只需:
docker-compose down scp docker-compose.yml .env root@target_host:/path/to/project/ docker-compose up -d
即可无缝迁移。
🧰 三、推荐方案总结
| 场景 | 推荐命令 | 说明 |
|---|---|---|
| 迁移镜像 | docker save/load | 保留镜像层结构 |
| 迁移容器状态 | docker commit + save/load | 保留运行时更改 |
| 迁移数据卷 | 拷贝 /var/lib/docker/volumes/ 或用 alpine 临时容器复制 | 保留数据文件 |
| 整机迁移 | 停止 Docker 后 rsync /var/lib/docker/ | 最完整 |
| docker-compose 项目 | 复制 docker-compose.yml + .env | 方便且安全 |
其它相关推荐:
1、Ubuntu 24.04 安装 Docker Compose v2
2、Python 项目 docker 部署过程
评论列表