【发布时间】:2021-08-29 14:16:37
【问题描述】:
背景:
我使用的是 Ubuntu 20.04。 我正在尝试使用 docker-compose 构建图像。
这是我的docker-compose 文件
version: "3.8"
services:
web:
build: ./frontend
network_mode: "host"
ports:
- 3000:3000
api:
build: ./backend
network_mode: "host"
ports:
- 3001:3001
environment:
DB_URL: mongodb://db/foo-app
db:
image: mongo:4.0-xenial
ports:
- 27017:27017
volumes:
- foo-app-data:/data/db
volumes:
foo-app-data:
以下是我的两个Dockerfile 文件:
# ./backend file
FROM node:16.3.0-alpine3.13
RUN addgroup app && adduser -S -G app app
WORKDIR /app
USER root
COPY package*.json ./
# --- debug try
RUN npm cache clean --force
RUN npm config set registry https://registry.npmjs.org/
RUN npm install -g @angular/cli
# ---
RUN npm install
COPY . .
RUN chown app:app /app
USER app
EXPOSE 3001
CMD ["npm", "start"]
# ./frontend file
FROM node:16.3.0-alpine3.13
RUN addgroup app && adduser -S -G app app
WORKDIR /app
USER root
COPY package*.json ./
# --- debug try
RUN npm cache clean --force
RUN npm config set registry https://registry.npmjs.org/
# ---
RUN npm install
COPY . .
RUN chown app:app /app
USER app
EXPOSE 3000
CMD ["npm", "start"]
错误:
当我运行docker-compose build 时,会抛出以下错误:
Step 8/14 : RUN npm install -g @angular/cli
---> Running in ce221adb18f6
npm ERR! code EAI_AGAIN
npm ERR! syscall getaddrinfo
npm ERR! errno EAI_AGAIN
npm ERR! request to https://registry.npmjs.org/@angular%2fcli failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-06-13T10_19_13_600Z-debug.log
The command '/bin/sh -c npm install -g @angular/cli' returned a non-zero code: 1
ERROR: Service 'web' failed to build : Build failed
到目前为止我所尝试的:
当我手动构建每个 docker 文件时,我遇到了同样的错误,直到我使用了 --network=host。这意味着,当我使用docker build --network=host 构建图像时,它可以正常工作。所以我尝试将network_mode= "host" 添加到我的 docker-compose 文件中,但它并没有解决问题。
看在上帝的份上,在将此问题标记为重复之前阅读此内容:
- 这篇帖子here 提出了针对 docker 而不是 docker compose 的解决方案。当我
ping registry.npmjs.org时,连接正常。 - 这篇帖子here 向
docker-compose up提出建议,这将引发与我在这里完全相同的错误。 - 这篇文章here 不起作用,我已经多次重新启动 docker。最重要的是,我会在抛出错误后清理所有 docker 映像,以确保下次构建时不会使用缓存中的任何内容。
- 这个帖子here 也不起作用。我尝试 (1) 从 npm 配置中删除代理,并在我的 Dockerfile 中添加额外的行
npm cache clean --force和npm config set registry https://registry.npmjs.org/。没有任何效果。 - 这个帖子here不仅没有解决问题,而且也没有很好地解释提出解决方案的原因。
- 这篇帖子here 我什至不知道 StackOverflow 上如何允许这个答案。
【问题讨论】:
标签: node.js docker npm docker-compose