How to communicate between Docker containers via “hostname”

后端 未结 5 1216
离开以前
离开以前 2020-11-27 10:02

I plan to split my monolthic server up into many small docker containers but haven\'t found a good solution for \"inter-container communication\" yet. This is my target scen

5条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-27 10:22

    Edit: After Docker 1.9, the docker network command (see below https://stackoverflow.com/a/35184695/977939) is the recommended way to achieve this.


    My solution is to set up a dnsmasq on the host to have DNS record automatically updated: "A" records have the names of containers and point to the IP addresses of the containers automatically (every 10 sec). The automatic updating script is pasted here:

    #!/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 [ -z ${service_map[$name]} ] || [ ${service_map[$name]} != $ip ] # IP addr changed
            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
    

    Make sure your dnsmasq service is available on docker0. Then, start your container with --dns HOST_ADDRESS to use this mini dns service.

    Reference: http://docs.blowb.org/setup-host/dnsmasq.html

提交回复
热议问题