一个重建Docker容器后保持容器的IP地址不变的方案

前提:Docker支持对自定义网络使用--ip制定自定义网络容器ip地址,如果未制定--ip参数(即首次创建容器会自动分配一个)。

1. 创建自定义网络(指定ip需要重启docker服务)

docker network create mynet && service docker restart

2. 创建脚本文件 recreateContainer.sh

#!/bin/sh

export DOCKER_NETWORK=mynet
export DOCKER_REGISTRY=172.16.1.160:5000
ip=`docker inspect $1 | jq .[].NetworkSettings.Networks.$DOCKER_NETWORK.IPAddress`
if [ "$ip" = '""' ]
then
        #container stoped,cannot get ip from docker inspect, try to get ip from hosts
        hostname=`docker inspect $1 | jq .[].Config.Hostname|sed 's/\"//g'`
        id=`docker inspect $hostname | jq .[].Id | sed 's/\"//g' `
        ip=`cat /var/lib/docker/containers/$id/hosts| grep $hostname | awk '{print $1}'`
fi

#replace "
ip=`echo $ip |sed 's/\"//g'`
docker rm -f $1
if [ "$ip" = '' ]
then
        docker run -d --restart=always --name=$1 --hostname=$1 --network=$DOCKER_NETWORK $DOCKER_REGISTRY/centos /bin/tail -f /etc/hosts
else
        docker run -d --restart=always --name=$1 --hostname=$1 --network=$DOCKER_NETWORK --ip=$ip $DOCKER_REGISTRY/centos /bin/tail -f /etc/hosts
fi

3. 安装json解析工具jq

# sudo dnf install -y jq

4. 测试脚本

# sh recreateContainer.sh os1
os1
60dc6c04b6be130a4eff047c6d64367025ef34c96d78e55134fc44efc2295979


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值