工作中的一个需求,环境中有很多的容器,每次容器启动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