Docker – 在DNScaching中找不到主机名
我正在使用Dockerfile打我们的公司Nexus(npm)服务器的'npm安装'命令。 我看到:
* Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 216.xxx.xxx.xxx... * connect to 216.xxx.xxx.xxx port 443 failed: Connection refused * Failed to connect to nexus.<something>.com port 443: Connection refused * Closing connection 0 curl: (7) Failed to connect to nexus.<something>.com port 443: Connection refused
我可以解决www.google.com。 我可以打我的公司NPM注册从我的本地盒子。 看来只有我们的内部DNS名称是问题,只有当试图从docker集装箱内访问他们。 我GOOGLE了,无法确定我需要做的修改这个问题的变化。
Dockerfile(我修剪了不相关的命令):
FROM node:6.3 RUN curl -k -v https://www.google.com RUN curl -k -vv https://nexus.<something>.com/repository/npm-all/
curl to google.com成功。 卷入我们的内部回购失败。
我正在用命令开始它:
docker build .
/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 127.0.1.1
我正在运行Ubuntu 15.10。
解
@BMitch是正确的。 通过添加与公司networking关联的DNS服务器地址,修改/etc/resolv.conf的内容。 对于Ubuntu 15+(我正在运行gnome3),您的configuration文件将被networkingpipe理器覆盖,因此无法手动编辑。 通过networkingpipe理器gui进行更改。 打开networking设置,selectDNS选项卡并添加服务器。
本地dns地址是您面临的问题。 容器无法从容器内部连接到本地主机ip。 解决办法是在docker run
传递DNS服务器的ip地址,或者更新/etc/resolv.conf来指向非loopback ip地址。
从Docker的DNS文档 :
过滤是必要的,因为主机上的所有本地主机地址都无法从容器的networking访问。 在过滤之后,如果容器的/etc/resolv.conf文件中没有剩下名称服务器条目,则守护程序会将公用Google DNS名称服务器(8.8.8.8和8.8.4.4)添加到容器的DNSconfiguration中。 如果守护程序启用了IPv6,则还将添加公共IPv6 Google DNS名称服务器(2001:4860:4860 :: 8888和2001:4860:4860 :: 8844)。
注意:如果您需要访问主机的本地主机parsing程序,则必须修改主机上的DNS服务以侦听可从容器内访问的非本地主机地址。