使用命令“/bin/sh -c npm ci”构建服务失败

A service is failing to build with the command '/bin/sh -c npm ci'

我正在设置一个容器来托管我的 React 客户端代码,但在本地计算机上构建失败,退出代码为 1。我应该如何解决此错误?

我已经尝试重新启动 docker 机器和 docker 客户端。

docker-机器版本 0.16.0,build 702c267f

docker-compose 版本 1.17.1,构建未知

Docker 版本 19.03.1,内部版本 74b1e89

我的docker-compose.yml:

version: '3.3'

services:

client:
    build: 
      context: ./services/client
      dockerfile: Dockerfile
    volumes: 
      - './services/client:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports: 
      - 3007:3000
    environment: 
      - NODE_ENV=development
      - REACT_APP_USERS_SERVICE_URL=${REACT_APP_USERS_SERVICE_URL}
    depends_on: 
      - users

我的Docker文件:

# base image
FROM node:11.12.0-alpine

# set working directory
WORKDIR /usr/src/app

# add /usr/src/app/node_modules/.bin to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /usr/src/app/package.json
COPY package-lock.json /usr/src/app/package-lock.json
RUN npm ci
RUN npm install react-scripts -g --silent

# start app
CMD ["npm", "start"]

我期待服务 "client" 成功构建,但我不断收到以下错误。

npm ERR! code EAI_AGAIN
npm ERR! errno EAI_AGAIN
npm ERR! request to https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-08-15T05_55_38_024Z-debug.log
ERROR: Service 'client' failed to build: The command '/bin/sh -c npm ci' returned a non-zero code: 1

错误 npm ERR! errno EAI_AGAIN 表示 DNS 错误 我建议您执行以下操作之一:

使用 host 网络构建您的图像:

version: '3.4'

services:

client:
    build: 
      context: ./services/client
      dockerfile: Dockerfile
      network: host
    volumes: 
      - './services/client:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports: 
      - 3007:3000
    environment: 
      - NODE_ENV=development
      - REACT_APP_USERS_SERVICE_URL=${REACT_APP_USERS_SERVICE_URL}
    depends_on: 
      - users

或将 dns 设置添加到您的 daemon.json 文件:

{
    "dns": ["8.8.8.8"]
}