我在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
为什么?我当然可以从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" ]
和package.json
{
"name": "mp",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "~4.13.1"
}
}
答案 0 :(得分:8)
使用此命令重新启动docker会为我修复它,但我不知道为什么
sudo service docker restart
答案 1 :(得分:3)
我根据这篇文章https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-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
从第1步结果可以看出,我收到错误并且无法解析与google.com
的连接,如果您遇到类似错误,请执行此操作以检查当前的DNS路由。
>> nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 192.168.2.1
该命令公开了您的IP4 DNS,在这种情况下192.168.2.1
,在此步骤中您已经知道DNS。
让我们继续使用busybox
容器通过运行
>> 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无法连接,因为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
}
重新启动泊坞窗服务
>> sudo service docker restart
答案 2 :(得分:0)
对我来说,问题是,我的交换分区在调整根分区 之后出现了问题 并且问了我的密码短语所有系统任务(如apt get命令,重启/启动等)。
请在没有
的情况下输入磁盘密码...(cryptswap1)
注意强>
只有在您看到上述错误时才尝试此操作,当您尝试在docker容器中执行npm install
时遇到问题中描述的问题:
错误:getaddrinfo ENOTFOUND / EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
解决方案
修改/etc/crypttab
并替换UUID=****
以获得以下模式:
cryptswap1 /dev/SWAP_PARTITION/ /dev/urandom swap,**,cipher=****
重新启动,如果仍然要求您提供密码,请继续:
sudo dd if=/dev/zero of=/dev/SWAP_PARTITION/ bs=512 count=20480
并重新启动。这为我修好了。答案 3 :(得分:0)
我正在学习一个教程。复制所有文件时,对我来说不会发生此错误:
# Specify base image
FROM node:alpine
WORKDIR /usr/app
# Install dependencies
COPY ./ ./
RUN npm install
# Default command
CMD ["npm", "start"]
当我先复制package.json
然后在npm install
之后复制其他文件时,这种情况就发生了:
# Specify base image
FROM node:alpine
WORKDIR /usr/app
# Install dependencies
COPY ./package.json ./
RUN npm install
COPY ./ ./
# Default command
CMD ["npm", "start"]
答案 4 :(得分:0)
如果您能够ping / curl到npm注册表,但仍然遇到npm install
错误,则该错误可能是由于缺少ca-certs软件包。在npm install
之前,将以下行添加到Dockerfile中,然后重新构建映像。
FROM node:alpine
# Installing cert package will allow resolving the error to https://registry.npmjs.org/
RUN apk add --no-cache ca-certificates
RUN npm install
CMD ["npm", "start"]
答案 5 :(得分:0)
我遇到了同样的问题。我的解决方法是将docker build
附加到一个已知的可运行且可访问的Docker网络。
解决方法
docker network ls
docker build --network=<known working network name>
默认情况下,Docker使用默认网络进行构建。手动设置网络可确保网络可以访问互联网。
答案 6 :(得分:0)
我尝试了以上所有内容,但对我没有任何帮助。添加--dns参数时,好奇的dockerd systemd脚本未启动。
在我的情况下,问题是在ubuntu中,/etc/resolv.conf由systemd-resolved自动生成,并指向运行缓存DNS的本地ip 127.0.0.53,这很疯狂,但是有了此信息,容器尝试在其Loopack界面中自行解析DNS。在局域网中手动将resolv.conf更改为我们公司的DNS可解决此问题,然后修改systemd-resolved使其永久解决。