#!/usr/bin/env bash
###################################
# 在单机部署docker容器的时候,经常会遇到docker容器重启,ip发生变化
# 主机访问容器,如果通过ip访问,经常性需要修改
# 因此,写了个脚本来查询当前所有容器的ip地址,并根据容器名Name来添加到hosts映射
######## Querying #######
######## 2018-4-16 #######
##
###################################
container_name=''
RESULT=''
HOSTS_FILE="/etc/hosts"
# 获取当前文件所在的文件夹名
# 预定义变量为小写字符串
typeset -l parent_folder_name
# 由于已经预定义类型,所以parent_folder_name是纯小写字符串
parent_folder_name=`basename $PWD`
#PROJECT_NAME="${parent_folder_name}_default"
for container_id in `docker ps -q`
do
networkMode=`docker inspect ${container_id} -f="{{.HostConfig.NetworkMode}}"`
echo "获取到NetworkMode:${networkMode}"
# echo `docker inspect ${container_id} -f="{{.NetworkSettings.Networks}}"`
# exit
container_ip=`docker inspect ${container_id} -f="{{.NetworkSettings.Networks.${networkMode}.IPAddress}}"`
container_name=`docker inspect ${container_id} -f='{{.Name}}' | sed 's/\///g'`
echo -e "
容器name: ${container_name}\n
容器id: ${container_id}\n
容器ip: ${container_ip}
"
ALIAS_RESULT=`cat ${HOSTS_FILE} | grep ${container_name}`
if [ "${ALIAS_RESULT}" != "" ] ; then
sed -i "s/ ${container_name}//g" "${HOSTS_FILE}"
fi
IP_RESULT=`cat /etc/hosts | grep ${container_ip}`
IP_RESULT=${IP_RESULT%%\#*}
if [ "${IP_RESULT}" != "" ] ; then
#已经存在当前ip映射,那么在后面追加别名
#执行覆盖操作
replace_str="${IP_RESULT} ${container_name}"
# -i 直接修改并保存
sed -i "s/${IP_RESULT}/${replace_str}/g" "${HOSTS_FILE}"
else
echo "${container_ip} ${container_name}" >> "${HOSTS_FILE}"
fi
done
转载于:https://my.oschina.net/querying/blog/1924798