docker npm install错误:getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443

iro*_*rom 4 node.js docker

我在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

为了检查那件事,我做了这些步骤来使它工作

第1步

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)

第2步

正如您从第 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。

第 3 步

让我们继续使用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)

第 5 步

重启你的 docker 服务

>> sudo service docker restart
Run Code Online (Sandbox Code Playgroud)


Gaa*_*far 9

使用此命令重新启动docker会为我修复它,但我不知道为什么

sudo service docker restart