You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带Docker卷的容器跨主机迁移:脚本错误与参数疑问

带Docker卷的容器跨主机复制问题解决

一、修复docker-volumes.sh: command not found错误

  • 先确认脚本是否存在:
    • 若为自定义脚本,执行时需使用绝对路径(比如/opt/scripts/docker-volumes.sh),或者将脚本所在目录加入系统$PATH
    • 若依赖第三方脚本但未下载,可手动实现卷备份逻辑,无需依赖该脚本:
      1. 查看容器的卷挂载信息,获取卷名:
        docker inspect <容器ID/名称> | grep -E "Source|Destination"
        
      2. 将卷内容打包备份到本地:
        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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:35:17