docker-compose 使用 getaddrinfo EAI_AGAIN 抛出错误registry.npmjs.org

asa*_*asa 6 node.js npm docker docker-compose

背景:

我使用的是 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: 
Run Code Online (Sandbox Code Playgroud)

下面是我的两个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"]
Run Code Online (Sandbox Code Playgroud)
# ./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"]
Run Code Online (Sandbox Code Playgroud)

错误:

当我运行时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

Run Code Online (Sandbox Code Playgroud)

到目前为止我已经尝试过:

当我手动构建每个 docker 文件时,我遇到了相同的错误,直到我使用--network=host. 这意味着,当我使用 构建图像时docker build --network=host,它工作得很好。所以我尝试添加network_mode= "host"到我的 docker-compose 文件中,但它没有解决问题。

看在上帝的份上,在将此问题标记为重复之前先阅读以下内容

  1. 这篇文章提出了一个针对 docker 而不是 docker compose 的解决方案。当我 时ping registry.npmjs.org,连接工作正常。
  2. 这篇文章建议docker-compose up,这将引发与我在这里完全相同的错误。
  3. 这篇文章不起作用,我已经重启了docker多次。最重要的是,我在抛出错误后清理所有 docker 映像,以确保下次构建时不会使用缓存中的任何内容。
  4. 这篇文章在这里也不起作用。我尝试 (1) 从 npm 配置中删除代理,并在我的 Dockerfile 中添加额外的行npm cache clean --forcenpm config set registry https://registry.npmjs.org/。什么都不起作用。
  5. 这篇文章不仅没有解决问题,而且也没有很好地解释提出解决方案的原因。
  6. 这篇文章我什至不知道 StackOverflow 上如何允许这个答案。

Nés*_*tor 0

如果将network_mode主机值一起使用,则不能将其与端口映射混合使用: https: //docs.docker.com/compose/compose-file/compose-file-v3/#ports

然后,或者将网络模式更改为桥接,或者删除每个服务的端口映射。


归档时间:

查看次数:

4608 次

最近记录:

3 年,7 月 前