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服务以侦听可从容器内访问的非本地主机地址。