首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker安装错误: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443

docker安装错误: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
EN

Stack Overflow用户
提问于 2016-02-19 21:18:31
回答 7查看 22.5K关注 0票数 10

我在RHEL 7上使用了docker版本1.10.1,并在使用下面的Dockerfile时获得了npm安装错误。错误: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443。同样的工作与码头1.91在ubuntu 14.04。当我在容器上进行bash并安装inetutils ping时,我注意到我哪里也不能ping。

代码语言:javascript
复制
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

那是为什么?我当然可以从RHEL

Dockerfile

代码语言:javascript
复制
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" ]

和package.json

代码语言:javascript
复制
{
  "name": "mp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "~4.13.1"

  }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-04-19 13:19:20

用这个命令重新启动docker为我修复了它,但我不知道为什么

sudo service docker restart

票数 18
EN

Stack Overflow用户

发布于 2018-04-20 07:30:20

我基于本文https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns修复了这个问题

实际上,您可以在调用registry.npmjs.org时检查DNS是否失败。

为了检查那个东西,我做了这些步骤来使它工作。

第一步

busybox映像上运行以下命令,我将使用google.com模拟连接请求

代码语言:javascript
复制
>> 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

第二步

正如您从步骤1的结果中看到的,我得到了一个错误,无法解析到google.com的连接,如果您有类似的错误,那么就这样做来检查您当前的DNS路由。

代码语言:javascript
复制
 >> nmcli dev show | grep 'IP4.DNS' 
    IP4.DNS[1]:                             192.168.2.1

该命令公开您的IP4 DNS,在本例中是192.168.2.1,在此步骤中,您已经知道了DNS。

第三步

让我们继续使用busybox容器通过运行

代码语言:javascript
复制
 >> 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
    ....

第四步

如果您的结果类似于步骤3,那么您的问题是对接无法连接,因为docker不知道DNS将被使用,所以我们通过创建daemon.json文件并在/etc/docker/daemon.json中找到它来解决这个问题。这些内容要放进去。

代码语言:javascript
复制
{
  "dns": ["192.168.2.1", "8.8.8.8"] // 192.168.2.1 is value of your dns
}

第五步

重新启动您的码头服务

代码语言:javascript
复制
>> sudo service docker restart
票数 15
EN

Stack Overflow用户

发布于 2019-07-29 06:10:48

我遇到了同样的问题。我的解决办法是将docker build附加到已知的工作和可访问的码头网络。

解决方案

  • docker network ls
  • 选择已知的工作网络
  • docker build --network=<known working network name>

默认情况下,Docker使用默认网络进行生成。手动设置网络,确保网络能够访问internet。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35515203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档