42 lines
977 B
Bash
42 lines
977 B
Bash
#!/bin/bash
|
|
|
|
# 10 seconds interval time by default
|
|
INTERVAL=${INTERVAL:-10}
|
|
|
|
# dnsmasq config directory
|
|
DNSMASQ_CONFIG=${DNSMASQ_CONFIG:-.}
|
|
|
|
# commands used in this script
|
|
DOCKER=${DOCKER:-docker}
|
|
SLEEP=${SLEEP:-sleep}
|
|
TAIL=${TAIL:-tail}
|
|
|
|
declare -A service_map
|
|
|
|
while true
|
|
do
|
|
changed=false
|
|
while read line
|
|
do
|
|
name=${line##* }
|
|
ip=$(${DOCKER} inspect --format '{{.NetworkSettings.IPAddress}}' $name)
|
|
# if IP addr changed
|
|
if [ -z ${service_map[$name]} ] || [ ${service_map[$name]} != $ip ]
|
|
then
|
|
service_map[$name]=$ip
|
|
# write to file
|
|
echo $name has a new IP Address $ip >&2
|
|
echo "host-record=$name,$ip" > "${DNSMASQ_CONFIG}/docker-$name"
|
|
changed=true
|
|
fi
|
|
done < <(${DOCKER} ps | ${TAIL} -n +2)
|
|
|
|
# a change of IP address occured, restart dnsmasq
|
|
if [ $changed = true ]
|
|
then
|
|
systemctl restart dnsmasq
|
|
fi
|
|
|
|
${SLEEP} $INTERVAL
|
|
done
|