我在RHEL 7上使用docker版本1.10.1并在使用Dockerfile下面时获取npm install错误.错误:getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443.与ubuntu 14.04上的docker 1.91相同的工作.当我得到bash并在容器上安装inetutils-ping时,我注意到我无法ping任何地方
root@9deb4b274c1e:/home/nodexp#ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
^C--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
Run Code Online (Sandbox Code Playgroud)
这是为什么 ?当然我可以从RHEL ping
Dockerfile
FROM node:argon
# Create user nodexp in group nodexp
RUN groupadd -r nodexp \
&& useradd -m -r -g nodexp nodexp
WORKDIR /home/nodexp
# Install app dependencies
COPY package.json /home/nodexp
RUN npm install
# Bundle app source
COPY . /home/nodexp
EXPOSE 3000
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
和package.json
{
"name": "mp",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "~4.13.1"
}
}
Run Code Online (Sandbox Code Playgroud)
Adi*_*ana 11
我根据这篇文章解决了这个问题https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns
实际上,您可以在调用时检查 DNS 是否失败 registry.npmjs.org
为了检查那件事,我做了这些步骤来使它工作
在busybox图像上运行此命令,我将使用 google.com 来模拟连接请求
>> docker run busybox nslookup google.com
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
f70adabe43c0: Pull complete
Digest: sha256:58ac43b2cc92c687a32c8be6278e50a063579655fe3090125dcb2af0ff9e1a64
Status: Downloaded newer image for busybox:latest
nslookup: can't resolve 'google.com'
Server: 8.8.8.8
Address 1: 8.8.8.8
Run Code Online (Sandbox Code Playgroud)
正如您从第 1 步的结果中看到的,我遇到了一个错误并且无法解析到 的连接google.com,如果您遇到类似的错误,请执行此操作以检查您当前的 DNS 路由。
>> nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 192.168.2.1
Run Code Online (Sandbox Code Playgroud)
该命令公开您的 IP4 DNS,在这种情况下192.168.2.1,在此步骤中您已经知道 DNS。
让我们继续使用busybox容器通过运行来使用此 DNS 进行连接
>> docker run --dns 192.168.2.1 busybox nslookup google.com
Server: 192.168.2.1
Address 1: 192.168.2.1 giftcard.dyndns.org
Name: google.com
Address 1: 2404:6800:4003:c03::65
....
Run Code Online (Sandbox Code Playgroud)
如果您的结果与第 3 步类似,那么您的问题是 docker 无法连接,因为 docker 不知道将使用 DNS,因此我们通过制作daemon.json文件并在/etc/docker/daemon.json. 这些内容要放。
{
"dns": ["192.168.2.1", "8.8.8.8"] // 192.168.2.1 is value of your dns
}
Run Code Online (Sandbox Code Playgroud)
重启你的 docker 服务
>> sudo service docker restart
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7620 次 |
| 最近记录: |