docker容器迁移shell命令

如果需要迁移一个容器,需要把现有运行中的容器export打包,并在新主机上import导入。如果没有安装k8s或rancher,这种需求会很麻烦。

即使在导入新服务器上之后,也需要同步开启之前容器的端口、volume、环境变量、commands。如果包含大量的容器这个工作就会很繁琐。

个人写了脚本用于导出之前容器的运行信息,自动构建新服务器上的启动命令。

#!/bin/bash

#网络模式的名称
netName="bridge-apole"

for id in `docker ps -q --no-trunc`; do
    echo -e "\n---- begin build ${id} shell cmd.\n.."
    containerName=`docker ps --format {{.Names}} --filter id=${id}`
    postList=""
    for port in `docker port ${id} |grep -v "::" |awk -F '/|:' '{print $1":"$3}'`; do
        postList=`echo "${postList} -p ${port}"`
    done
    IPADDRESS=`docker inspect ${id} -f '{{range .NetworkSettings.Networks}}{{.IPAMConfig.IPv4Address}}{{end}}'`
    volumeList=""
    for volume in `docker inspect ${id} -f '{{join .HostConfig.Binds "\n"}}'`; do
        volumeList=`echo "${volumeList} -v ${volume}"`
    done
    envList=""
    for env in `docker inspect ${id} --format='{{join .Config.Env "\n"}}'`; do
        #环境变量需要双引号,这里s///只替换一次
        env=`echo ${env} |sed 's/=/="/' |sed 's/$/"/'`  
        envList=`echo "${envList} -e ${env}"`
    done
    commandStr=`docker ps --no-trunc --format "table {{.Command}}" --filter id=${id} |grep -v "^COMMAND" |sed 's/.//' |sed 's/.$//'`  #删除command首尾的字符
    dockerRun="docker run --name ${containerName} -d ${postList} --net ${netName} --ip ${IPADDRESS} ${volumeList} ${envList} ${containerName} ${commandStr}"
    echo $dockerRun
    echo ""
done
~     

ps: 未经过实际测试....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值