根据端口号自动替换IP并开启docker容器

       工作中的一个需求,环境中有很多的容器,每次容器启动IP地址会变动,需要根据容器的IP更改配置文件中的IP,启动前端的代理。

        写作 基本思路,把操作命令理顺,将输入内容做限定,判断运行状态做输出。

以下为脚本内容,做个工作记录。有用的地方可以以资借鉴,请大家多提意见。

#!/bin/bash

cat << EOF

本脚本是根据端口,查找容器名称,替换配置IP,启动容器。

EOF

#开启调试模式

#set -x

#获取输入内容

read -p "请输入端口号: " input

#获取4位数字端口号,下位中的{4}为限定数字位数

if [[ $input =~ ^[0-9]{4}$ ]]; then

    #echo "输入的是一个四位的数字。$input"

    FIND_FILE="/home/nginx/conf.d/upstream.conf"

    setfilename="/home/nginx/conf.d"

    nport=$(grep -lr "$input" $setfilename | wc -l)

    if [ "$nport" -ne '0' ]; then

        echo "输入端口存在"

        dockername=$(ls /home/nginx/conf.d/ | grep "$input" | cut -d '-' -f 2 | cut -d '.' -f 1)

        echo "查找到的容器名是$dockername"

        dockerrunname=$(docker ps | grep -c "$dockername")

        if [ "$dockerrunname" -eq 1 ]; then

            echo "容器 $dockername is running."

            exit

        else

            echo "将启动容器: $dockername"

        fi

        docker start "$dockername"

        if [ $? -eq 0 ]; then

            echo "$dockername 容器启动成功"

        else

            echo "$dockername 容器启动失败"

        fi

        dockerip=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$dockername")

        echo "启动的容器的ip是 $dockerip"

        upstreamip=$(cat /home/nginx/conf.d/upstream.conf | grep -E "$dockername\s" -A 1 | grep -oE '([0-9]*\.){3}[0-9]*')

        echo "nginx中的upstream配置ip是 $upstreamip"

        if [ "$dockerip" = "$upstreamip" ]; then

            echo "$dockername 启动完成。"

        else

            sed -i "s/${upstreamip}/${dockerip}/g" $FIND_FILE

            docker exec -i nginx  nginx -s reload

            if [ $? -eq 0 ]; then

                echo "替换ip,docker启动成功"

            else

                echo "替换ip,docker启动失败"

            fi

        fi

    else

        echo "端口不存在"

    fi

else

    echo "输入的不是一个四位的数字。"

fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值