云计算百科
云计算领域专业知识百科平台

Docker容器跨服务器迁移方案

Docker容器跨服务器迁移方案

一、方案概述

本方案用于实现Docker容器从一台源服务器(旧服务器)迁移至另一台目标服务器(新服务器),核心目标是保证容器迁移后可正常运行、数据不丢失、配置与迁移前一致。迁移核心流程包括:容器镜像保存与导出、数据卷(若有)导出、文件跨服务器传输、目标服务器镜像与数据卷导入、容器重新启动,全程基于Docker原生命令操作,无需额外部署迁移工具,兼顾简洁性与可靠性。

二、迁移准备

2.1 环境要求

  • 源服务器:已部署Docker服务,容器处于正常运行或可停止状态,具备容器操作权限(root或sudo权限)。

  • 目标服务器:已部署Docker服务(版本建议与源服务器一致,避免镜像兼容性问题),具备文件接收、Docker操作权限,与源服务器网络互通(可通过SSH、SCP等工具传输文件)。

  • 传输工具:默认使用SCP(基于SSH协议),确保源服务器可通过SSH连接目标服务器,若网络受限,可替换为FTP、共享存储等其他文件传输方式。

2.2 前置检查

  • 检查源服务器容器状态:确认需迁移的容器名称/ID、运行状态,记录容器挂载的数据卷路径(若有)。

  • 检查目标服务器资源:确认目标服务器磁盘空间充足(需大于镜像+数据卷总大小)、Docker服务正常运行(systemctl status docker)。

  • 数据备份:迁移前建议对源服务器容器数据、镜像进行备份,避免迁移过程中数据丢失(可额外执行镜像保存、数据卷复制操作)。

三、详细迁移步骤

本步骤以“源服务器(旧服务器)操作→文件传输→目标服务器(新服务器)操作”为顺序,所有命令均基于root权限执行,若使用普通用户,需添加sudo前缀。

3.1 源服务器操作:镜像与数据卷处理

3.1.1 保存容器为镜像

若需迁移的容器已存在对应镜像,可跳过此步骤;若仅存在容器(无自定义镜像),需将容器提交为镜像,确保迁移后可基于镜像重新启动容器。

# 语法:docker commit 容器名称/ID 镜像名称:标签
# 示例:将容器my_container提交为镜像my_image,标签为latest
docker commit my_container my_image:latest

注意:提交镜像时,容器可正常运行或已停止,建议停止容器后提交(docker stop my_container),避免数据不一致。

3.1.2 导出镜像为tar文件

将上一步保存的镜像导出为tar压缩文件,便于跨服务器传输(tar文件可自定义命名和存储路径)。

# 语法:docker save -o 导出路径/镜像文件名.tar 镜像名称:标签
# 示例:将my_image:latest导出为当前目录下的my_image.tar
docker save -o my_image.tar my_image:latest

3.1.3 导出数据卷(若容器挂载数据卷)

若容器挂载了数据卷(用于持久化数据,如数据库数据、配置文件等),需将数据卷内容导出至源服务器本地文件系统,避免迁移后数据丢失。

# 步骤1:查找容器挂载的数据卷路径(容器内路径)
docker inspect my_container | grep -i mountpoint

# 步骤2:将容器内的数据卷复制到源服务器本地路径
# 语法:docker cp 容器名称/ID:容器内数据卷路径 源服务器本地存储路径
# 示例:将my_container内的/data路径(数据卷)复制到本地/root/local_data目录
docker cp my_container:/data /root/local_data

注意:若有多个数据卷,需分别执行复制命令;复制完成后,可检查本地路径下的文件是否完整。

3.2 文件跨服务器传输

将源服务器导出的镜像tar文件、本地复制的数据卷文件夹,通过SCP传输至目标服务器指定目录。传输前需确认目标服务器的IP地址、登录用户名及接收路径。

# 语法1:传输镜像tar文件
scp 源服务器镜像路径/镜像文件名.tar 目标服务器用户名@目标服务器IP:目标服务器接收路径

# 语法2:传输数据卷文件夹(需加-r参数,递归传输文件夹)
scp -r 源服务器数据卷本地路径 目标服务器用户名@目标服务器IP:目标服务器接收路径

# 示例:假设目标服务器IP为192.168.1.100,用户名为user,接收路径为/root/docker_migration
scp my_image.tar user@192.168.1.100:/root/docker_migration
scp -r /root/local_data user@192.168.1.100:/root/docker_migration

补充:若传输过程中提示SSH连接失败,需检查目标服务器SSH服务是否正常、防火墙是否开放22端口、登录密码/密钥是否正确。

3.3 目标服务器操作:镜像与数据卷导入及容器启动

3.3.1 导入镜像

登录目标服务器,将传输过来的镜像tar文件导入Docker,生成可用于启动容器的镜像。

# 语法:docker load -i 目标服务器镜像tar文件路径
# 示例:导入/root/docker_migration目录下的my_image.tar
docker load -i /root/docker_migration/my_image.tar

导入完成后,可通过docker images命令检查镜像是否成功导入(确认存在my_image:latest)。

3.3.2 恢复数据卷(若有)

将传输至目标服务器的数据卷文件夹,复制到即将启动的新容器对应的路径(若新容器尚未创建,可先执行容器启动命令,再执行复制操作)。

# 语法:docker cp 目标服务器数据卷路径 新容器名称/ID:容器内数据卷路径
# 示例:先启动临时容器(若未启动),再复制数据卷
docker run -d –name new_container my_image:latest
docker cp /root/docker_migration/local_data new_container:/data

3.3.3 启动容器并验证

基于导入的镜像启动新容器,若有数据卷,需在启动时挂载数据卷(确保数据卷路径与源服务器一致,避免配置错乱),启动后验证容器运行状态及数据完整性。

# 语法:docker run -d –name 新容器名称 -v 目标服务器数据卷路径:容器内数据卷路径 镜像名称:标签
# 示例:启动新容器new_container,挂载数据卷,后台运行
docker run -d –name new_container -v /root/docker_migration/local_data:/data my_image:latest

# 验证容器状态(确认容器为up状态)
docker ps

# 验证数据完整性(进入容器,检查数据是否与源服务器一致)
docker exec -it new_container /bin/bash
ls /data # 查看数据卷内文件

四、完整迁移示例(实操参考)

假设场景:源服务器容器名称my_container、数据卷路径/data,镜像名称my_image:latest;目标服务器IP 192.168.1.100,登录用户user,接收路径/root/docker_migration,新容器名称new_container。

4.1 源服务器命令(按顺序执行)

# 1. 停止容器(可选,建议执行)
docker stop my_container

# 2. 提交容器为镜像
docker commit my_container my_image:latest

# 3. 导出镜像
docker save -o my_image.tar my_image:latest

# 4. 导出数据卷
docker cp my_container:/data /root/local_data

# 5. 传输文件至目标服务器
scp my_image.tar user@192.168.1.100:/root/docker_migration
scp -r /root/local_data user@192.168.1.100:/root/docker_migration

4.2 目标服务器命令(按顺序执行)

# 1. 登录目标服务器(若未登录)
ssh user@192.168.1.100

# 2. 导入镜像
docker load -i /root/docker_migration/my_image.tar

# 3. 启动新容器(临时启动,用于接收数据卷)
docker run -d –name new_container my_image:latest

# 4. 恢复数据卷
docker cp /root/docker_migration/local_data new_container:/data

# 5. 重启容器(确保数据卷生效)
docker restart new_container

# 6. 验证容器与数据
docker ps # 查看容器状态
docker exec -it new_container ls /data # 查看数据

五、注意事项

  • 镜像兼容性:目标服务器Docker版本建议与源服务器一致,若版本差异较大,可能导致镜像导入失败或容器无法启动,可先升级/降级Docker版本。

  • 数据一致性:迁移前建议停止源服务器容器,避免传输数据时容器正在写入数据,导致数据丢失或损坏。

  • 权限问题:传输文件时,确保目标服务器接收路径具备写入权限;导入镜像、启动容器时,需具备Docker操作权限(root或sudo)。

  • 端口冲突:若目标服务器已存在相同端口的容器,启动新容器时需修改端口映射(添加-p参数,如-p 8081:80),避免端口冲突。

  • 清理残留:迁移完成并验证成功后,可删除源服务器导出的tar文件、本地数据卷副本,以及目标服务器的临时传输文件,释放磁盘空间。

六、异常处理

  • 镜像导入失败:提示“no space left on device”,需清理目标服务器磁盘空间;提示“invalid reference format”,检查镜像tar文件是否完整,重新传输。

  • 容器启动失败:查看容器日志(docker logs new_container),排查是否为数据卷路径错误、配置文件缺失、端口冲突等问题,对应调整后重新启动。

  • 数据丢失:确认源服务器数据卷导出是否完整,重新执行数据卷导出与传输操作,恢复数据后重启容器。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Docker容器跨服务器迁移方案
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!