带Docker卷的容器跨主机迁移:脚本错误与参数疑问
带Docker卷的容器跨主机复制问题解决
一、修复docker-volumes.sh: command not found错误
- 先确认脚本是否存在:
- 若为自定义脚本,执行时需使用绝对路径(比如
/opt/scripts/docker-volumes.sh),或者将脚本所在目录加入系统$PATH - 若依赖第三方脚本但未下载,可手动实现卷备份逻辑,无需依赖该脚本:
- 查看容器的卷挂载信息,获取卷名:
docker inspect <容器ID/名称> | grep -E "Source|Destination" - 将卷内容打包备份到本地:
docker run --rm -v <卷名>:/volume -v $(pwd):/backup alpine tar czf /backup/<卷名>.tar.gz -C /volume .
- 查看容器的卷挂载信息,获取卷名:
- 若为自定义脚本,执行时需使用绝对路径(比如
二、$USER@$HOST: 替换说明
这是目标主机的SSH访问标识,替换规则:
$USER替换为目标主机上拥有Docker操作权限的用户名(比如root,或加入docker组的普通用户)$HOST替换为目标主机的IP地址或域名(比如192.168.1.50、docker-node.example.com)- 示例:目标主机用户是
tom,IP为192.168.2.30,则写成tom@192.168.2.30:
三、完整跨主机复制流程
1. 源主机备份容器与卷
- 导出容器(或保存镜像,保留镜像历史):
# 导出容器为tar包(无镜像历史) docker export <容器ID/名称> > container.tar # 或保存镜像(保留历史,推荐) docker save <镜像名称> > image.tar - 按前面的方法备份所有关联卷,生成对应的
*.tar.gz包
2. 传输备份文件到目标主机
# 传输容器/镜像包 scp container.tar $USER@$HOST:/tmp/ # 传输所有卷备份包 scp <卷名1>.tar.gz <卷名2>.tar.gz $USER@$HOST:/tmp/
3. 目标主机恢复容器与卷
- 恢复卷:
# 创建对应名称的卷 docker volume create <卷名> # 解压备份包到卷中 docker run --rm -v <卷名>:/volume -v /tmp:/backup alpine tar xzf /backup/<卷名>.tar.gz -C /volume . - 恢复容器:
# 导入容器(对应export的包) cat /tmp/container.tar | docker import - <新镜像名>:<标签> # 或加载镜像(对应save的包) docker load < /tmp/image.tar # 启动容器,确保卷挂载路径与原容器一致 docker run -d -v <卷名>:<原容器挂载路径> <镜像名>:<标签>
内容的提问来源于stack exchange,提问作者Tahami Rizwan
相关产品推荐
相关产品推荐

