容器跨主机数据迁移同步大模型文件实操指南
将大模型文件从一台主机的容器迁移到另一台容器的核心思路是:先通过 docker cp 或挂载卷将文件从源容器复制到宿主机,再用 rsync、scp 等工具跨主机传输,最后再复制到目标容器。
本文面向零基础用户,提供可直接执行的命令和避坑要点,适合在多台云服务器(如泽御云服务器)之间同步训练好的模型文件。
准备工作:确认环境与网络
- 两台主机均安装 Docker,且容器已正常运行。
- 确保跨主机网络连通:检查安全组/防火墙开放所需端口(SSH 默认 22,rsync 也通过 SSH)。在泽御云服务器控制台添加安全组规则,允许源主机 IP 访问。
- 大模型文件可能很大(数十GB),建议预留足够磁盘空间,并优先使用断点续传工具如 rsync。
方法一:用 rsync 同步整个模型目录(推荐)
rsync 支持增量传输、断点续传,适合大文件夹。
- 在源主机的容器内,将模型文件打包到容器外(或直接使用宿主机目录挂载)。此处假设模型放在容器
/app/models,先复制到宿主机:
docker cp <容器名>:/app/models /tmp/source_models
- 在源主机执行 rsync 将目录传输到目标主机(目标主机需开启 SSH 服务):
rsync -avzP --progress /tmp/source_models/ user@目标IP:/tmp/dest_models/
-a归档模式保留权限和时间戳;-v详细输出;-z压缩传输;-P显示进度并支持断点续传。
- 传输完成后,在目标主机将文件复制到目标容器:
docker cp /tmp/dest_models/* <目标容器名>:/app/models/
方法二:用 scp 传输单个大文件
如果模型已打包成单个 tar.gz 文件(例如 20GB),scp 即可满足。
# 源主机:将模型打包并压缩
docker exec <容器名> tar czf /tmp/model.tar.gz -C /app/models .
docker cp <容器名>:/tmp/model.tar.gz /tmp/model.tar.gz
scp /tmp/model.tar.gz user@目标IP:/tmp/
# 目标主机解压到容器
docker cp /tmp/model.tar.gz <目标容器名>:/tmp/
docker exec <目标容器名> tar xzf /tmp/model.tar.gz -C /app/models
注意:scp 不支持断点续传,大文件建议先压缩再传输,或改用 rsync。
方法三:通过挂载卷直接共享宿主机目录
若两台主机挂载了共享存储(如 NFS、Ceph),可直接在容器启动时挂载同一路径。
此方法无需跨主机传输,但前提是共享存储已配置。
- 在源主机启动容器时挂载宿主机目录:
docker run -v /data/models:/app/models ... - 在目标主机同样挂载
/data/models即可读取同一份文件。
注意:要求共享存储性能足够,并确保文件写入一致性。
常见避坑与注意事项
- 权限问题:容器内用户 UID 与宿主机可能不同,传输后模型文件权限需调整。可在 docker cp 后执行
docker exec <容器名> chown -R 1000:1000 /app/models(替换实际 UID)。 - 文件完整性:大文件传输后务必校验。使用
md5sum或sha256sum比对源和目标文件。 - 传输中断:rsync 已支持断点续传,若中断重新执行相同命令即可。scp 则需要重新传输整个文件。
验证迁移结果
- 进入目标容器检查文件数量:
docker exec <目标容器名> ls -lh /app/models/ - 比对关键文件的校验值。在源主机执行
md5sum /tmp/source_models/large_model.bin,在目标主机执行md5sum /tmp/dest_models/large_model.bin,结果一致即成功。
常见问题解答
Q1:rsync 传输大文件速度慢怎么办?
A:可尝试启用压缩(-z)并调整带宽限制(--bwlimit),或使用并行传输工具(如 mrsync、parallel-rsync)。另外检查网络带宽和磁盘 IO 是否成为瓶颈。
Q2:docker cp 时提示“No such container”怎么办?
A:确认容器名或 ID 正确。使用 docker ps 查看正在运行的容器。注意容器需处于运行状态才能复制。
Q3:如何在传输前验证源文件完整性?
A:生成校验文件并随文件一起传输。例如:md5sum /tmp/model.tar.gz > /tmp/model.tar.gz.md5,然后同时将 .md5 文件传过去,在目标端执行 md5sum -c model.tar.gz.md5。
Q4:云服务器安全组如何配置才能允许跨主机传输?
A:以泽御云为例,登录控制台进入安全组管理,添加入站规则:协议 TCP,端口 22(SSH),来源填写源主机的公网 IP。若使用 rsync 也可通过其他端口,但默认走 SSH 即可。