Docker构建npm安装错误网络超时。

14

我尝试为Node应用构建镜像,但当我执行Docker构建时,出现了一个错误,提示我先运行npm install。

npm ERR! network timeout at: https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz

以下是Docker文件的内容:

FROM node:13

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

跟随我的 package.json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Bruno Cassiamani",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "config": "^3.3.1",
    "consign": "^0.1.6",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "request": "^2.88.2",
    "xml2js": "^0.4.23"
  }
}

操作系统版本:CentOS Linux release 8.1.1911 (Core)

Docker 版本:Docker version 19.03.8,build afacb8b

打印错误: https://i.imgur.com/GxRgpEG.png

3个回答

25

搜索更深入后,我发现真正的问题在于Centos 8版本的防火墙DNS存在问题,解决方案参考:https://github.com/docker/for-linux/issues/957 - Bruno Fabricio Cassiamani

3
在我的情况下,有效的解决方案是使用以下命令清理Docker镜像缓存:
docker image prune

请确保您可以在所需的Docker镜像内wget所需的npm包。例如,我使用了node:lts-alpine。因此,您需要运行以下命令:

docker run -it node:lts-alpine sh

运行(这是某个依赖的“yorkie”包),以确保它能够解析网络地址并下载文件。

wget https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz

1

我知道这可能有点晚了,但它可能会对某些人有所帮助,下面的解决方案对我有效。

  1. 创建 /etc/docker/daemon.json 文件
  2. 将以下代码放入其中
{
  "dns": ["1.1.1.1", "8.8.8.8"]
}

最后,运行 systemctl daemon-reloadsystemctl restart docker.service

谢谢@Ahmard,你让我免去了浪费更多宝贵时间的麻烦! - Daniel Faria Sampaio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接