dockerDNS不工作

我在Ubuntu的16:

我有一个服务器运行一个docker容器Bind9作为我的networkingDNS服务器在192.168.3.70 。 从我的networking的所有主机使用这个作为DNS,它很好。

我有运行Jenkins的主机上的另一个容器和DNS不起作用。

这是我用/etc/init.d/docker尝试的:

 # modify these in /etc/default/$BASE (/etc/default/docker) DOCKER=/usr/bin/$BASE # This is the pid file managed by docker itself DOCKER_PIDFILE=/var/run/$BASE.pid # This is the pid file created/managed by start-stop-daemon DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid DOCKER_LOGFILE=/var/log/$BASE.log DOCKER_OPTS="--dns 192.168.3.70 --dns 8.8.8.8" DOCKER_DESC="Docker" 

这不起作用,Jenkins仍然没有DNS。

当然,我已经重启守护进程,没有任何改变。

怎么了?

编辑

所以,我运行docker exec -i -t d...... /bin/bash并得到了一个bash shell。

cat /etc/resolv.conf

 # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.3.70 search olympus 

这是一个正确的DNS服务器,我可以ping 192.168.3.70

 jenkins@d76b1da9544d:/$ ping 192.168.3.70 PING 192.168.3.70 (192.168.3.70): 56 data bytes 64 bytes from 192.168.3.70: icmp_seq=0 ttl=64 time=0.094 ms 64 bytes from 192.168.3.70: icmp_seq=1 ttl=64 time=0.073 ms 

还没有dns。

Docker完全将networking抽象化,变成了一个非常复杂的错综复杂的混乱。

我相信它被configuration为将来自其他计算机的DNS连接redirect到DNS容器。 而来自盒子的DNS连接本身不被Docker拦截。

这是一个普遍的问题。 Docker运行这些服务,你自己将它们连接在一起。

解决这个问题的正确方法是深入分析networkingconfiguration,并以服务可以通信的方式对其进行重新configuration。 但是,这是非常复杂的,我们可能都没有资格,而且stackoverflow不适合运行一个很长的debugging会话。

因此,我们必须采用简单的解决方法:

通常在一个普通的服务器上运行你的DNS服务器,不要dockerize它们。 DNS服务在基础架构中至关重要。 为此只有小型服务器/虚拟机是很常见的。