所有外部DNS查询都在Docker容器内失败
当前docker版本: 1.13.1, build 092cba3
。
/etc/resolv.conf的内容:
search mycompany.local nameserver 127.0.0.11 options ndots:0
(真实的公司名称混淆)。
主机上的nslookup
本身是100%的,但是从容器内的任何外部主机名看起来都失败(不能事件运行apt-get update
)。 4节点群集中的所有主机都会出现相同的症状。 请注意内部服务名称parsing似乎在容器之间工作。
直接在我的笔记本电脑上运行相同的应用程序(在同一办公室networking)主机名解决好。
这正在变成一个缓慢移动的灾难。
涉及的集群仍然是1.12版本之前的版本,可能会有任何影响。
在Linux中, lo
或localhost接口的地址是127.0.0.1/8(即networking掩码255.0.0.0)。 networking掩码覆盖了整个范围:
127.0.0.0 - 127.255.255.255
由于127.0.0.11属于这个范围,到那个地址的连接将尝试通过lo
接口(容器内部 )作为连接路由进行路由。 除非您的容器具有内部configuration的地址, 并且有一个DNSparsing器监听该地址,否则将导致连接超时。
您可以通过将127.0.0.11路由到容器的主界面(例如eth0
)或通过更改DNSparsing器地址来解决此问题,使其位于127.0.0.0/8之外。
您也可以明确地设置DNS服务器IP。
docker run --dns 1.2.3.4 # set one server docker run --dns 1.2.3.4 --dns 5.6.7.8 # set multiple servers
或者使用docker-compose.yml:
dns: 1.2.3.4 dns: - 1.2.3.4 - 5.6.7.8
这是我使用的设置:
- 安装dnsmasq。
- 运行
echo interface=docker0 > /etc/dnsmasq.d/docker
- 重新启动dnsmasq。
- 将–dns 172.17.0.1添加到docker -run或Docker守护进程(将其添加到/ etc / default / docker中的DOCKER_OPTSvariables或编辑/lib/systemd/system/docker.service中的ExecStart伪指令)。
- 重新启动Docker。
现在,您已将所有容器指向Dnsmasq作为DNSparsing器。 另外一个好处就是在/ etc / hosts中的条目也被parsing了。
- 如何正确configurationVirtualBox的DNSconfiguration来parsing本地networking中的docker容器主机名?
- 我怎样才能触发我的容器中重装的resolv.conf?
- nslookup:isc_socket_bind:使用中的地址 – 无法parsingdocker容器中的dns(phusion image)
- Docker镜像dns probem,名字解决失败
- 如何在离子应用中将ip地址更改为域名
- kube-dns不能在kubernetesarm上工作
- 是否可以在具有不同子域和相同侦听端口(80)的单个主机上部署多个容器?
- Kubernetes / minikube无法在同一集群中ping pod,但nslookup可以正常工作
- 如何从docker-compose文件中覆盖/etc/resolv.conf中Docker的embedded式DNS服务器