$ sudo docker run -ti mmoy/ubuntu-netutils /bin/bash
root@082bd4ead733:/# ping www.example.com
... nothing happens (timeout) ... ^C
root@082bd4ead733:/# host www.example.com
... nothing happens (timeout) ... ^C
root@082bd4ead733:/# 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 8.8.8.8
nameserver 8.8.4.4
这只适用于许多配置,但当主机运行在谷歌的公共DNS被一些防火墙规则过滤的网络上时,显然就不适用了。
发生这种情况的原因是:
/etc/resolve.conf
中明显的DNS服务器是nameserver 127.0.1.1
,即localhost.127.0.1.1
不起作用,所以docker回到Google的公共DNS,它也不起作用。一个干净的解决方案是配置docker+dnsmasq,这样来自docker容器的DNS请求就可以转发到主机上运行的dnsmasq守护进程。
为此,您需要通过添加文件/etc/networkmanager/dnsmasq.d/docker-bridge.conf
,配置dnsmasq以侦听docker使用的网络接口:
$ cat /etc/NetworkManager/dnsmasq.d/docker-bridge.conf
listen-address=172.17.0.1
然后重新启动network manager以考虑配置文件:
sudo service network-manager restart
$ sudo docker run -ti --dns 172.17.0.1 mmoy/ubuntu-netutils bash
root@7805c7d153cc:/# ping www.example.com
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_seq=1 ttl=54 time=86.6 ms
$ cat /etc/docker/daemon.json
{
"dns": [
"172.17.0.1",
"8.8.8.8",
"8.8.4.4"
]
}
(如果dnsmasq失败,这将回到谷歌的公共DNS中)
您需要重新启动docker来考虑配置文件:
sudo service docker restart
然后就可以像往常一样使用docker了:
$ sudo docker run -ti mmoy/ubuntu-netutils bash
root@344a983908cb:/# ping www.example.com
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_seq=1 ttl=54 time=86.3 ms
问题内容: 症状是:主机具有适当的网络访问权限,但是在容器中运行的程序无法解析DNS名称(在进行更多调查之前,它似乎是“无法访问网络”)。 (docker映像mmoy / ubuntu- netutils 是基于Ubuntu 并附带的简单映像,在此很方便,因为网络断开了,我们无法使用这些工具) 问题来自于以下事实:Docker自动将Google的公共DNS配置为容器内的DNS服务器: 这仅适用于许
问题内容: 我在组成2.9(在yml版本2.1中)的“自定义”桥网络中的“ Ubuntu 16.10服务器”上运行多个容器。我的大多数容器在内部都使用相同的端口,因此我无法使用“主机”网络驱动程序。我的容器都是通过专用属性链接在一起的。 但是,我还需要访问容器外部公开的服务。这些服务具有专用URL,其名称已在我公司的DNS服务器中注册。虽然我可以使用公共DNS并从容器中访问任何公共服务没有问题,但
问题内容: 我在Mac上运行boot2docker。OSX版本10.9.3 boot2docker版本4.3.12 Docker版本0.12.0 boot2docker映像是一个使用virtualbox的无聊的盒子。我尝试了许多无用的盒子(例如stigkj / boot2docker)。他们都表现出这个问题。 如果我将ssh放入boot2docker映像并查看/etc/resolv.conf,则它
我在Centos7机器上安装了Docker,DNS不能在容器中工作。 因此,如果我在主机上运行,它将正确解析。但是,如果我执行,我会得到: 更新:这不仅发生在busybox上,在其他平台上也是如此。我的主要问题是无法运行从以下DockerFile构建的映像容器: docker-compose.yml: 这项服务运行良好,并在我的个人机器上运行最新的Ubuntu进行了测试
让dhcp服务器收集到的主机名 加入 dns服务中? 尝试过dnsmasq这个集成了 dhcp和dns服务器的软件,但是在网上搜索时,没发现这样的用法. 尝试把 建立一个ddns服务,然后让每台电脑 进行 动态域名注册 ,但是这样每台电脑都需要配置,感觉有点麻烦 最终期望
稳定性: 2 - 稳定的 dns 模块包含两类函数: 1) 第一类函数,使用底层操作系统工具进行域名解析,且无需进行网络通信。 这类函数只有一个:dns.lookup()。例子,查找 iana.org: const dns = require('dns'); dns.lookup('iana.org', (err, address, family) => { console.log('IP