有一个开源应用程序可以解决此问题,称为DNS Proxy Server,这里有一些来自官方存储库的示例
这是一个DNS服务器,用于解析容器的主机名,如果找不到匹配的主机名,则也可以从Internet解析它
启动DNS服务器
$ docker run --hostname dns.mageddo --restart=unless-stopped -p 5380:5380 -v /var/run/docker.sock:/var/run/docker.sock -v /etc/resolv.conf:/etc/resolv.conf defreitas/dns-proxy-server
它将自动设置为您的默认DNS(并在停止时恢复为原始DNS)
创建一些容器进行测试
检查docker-compose文件
$ cat docker-compose.ymlversion: '3'services: nginx-1: image: nginx hostname: nginx-1.docker network_mode: bridge linux-1: image: alpine hostname: linux-1.docker command: sh -c 'apk add --update bind-tools && tail -f /dev/null' network_mode: bridge # that way he can solve others containers names even inside, solve nginx-2, for example
起始容器
$ docker-compose up
解决容器
来自主机
nslookup nginx-1.dockerServer: 13.0.0.5Address: 13.0.0.5#53Non-authoritative answer:Name: nginx-1.dockerAddress: 13.0.0.6
从另一个容器
$ docker-compose exec linux-1 ping nginx-1.dockerPING nginx-1.docker (13.0.0.6): 56 data bytes64 bytes from 13.0.0.6: seq=0 ttl=64 time=0.034 ms
以及它解决互联网主机名
$ nslookup google.comServer: 13.0.0.5Address: 13.0.0.5#53Non-authoritative answer:Name: google.comAddress: 216.58.202.78



