文章内容

2025/12/4 19:25:00,作 者: 黄兵

Docker 迁移

Docker 的“迁移”可以有几种不同的含义,所以我先帮你区分清楚几种场景,再给出具体操作方式 👇

🧭 一、确定你的迁移目标

迁移目标 示例 推荐方案
迁移容器到另一台机器 从 A 服务器迁移容器(含数据卷)到 B 使用 docker commit + save / loaddocker 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 commit  mycontainer_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 部署过程

        3、查看所有 docker 容器占用内存

        4、Dockerfile 构建系统与 GitHub

        5、docker run -d 这里的 -d 参数具体作用?

        分享到:

        发表评论

        评论列表