无法在节点docker映像中安装npm

无法在节点docker映像中安装npm,docker,docker-compose,Docker,Docker Compose,这是我项目前端的Dockerfile 我把它作为服务之一放在我的docker compose.yml文件中,当我运行docker compose up-d--build时,它会给我 FROM node:latest WORKDIR /frontend/ ENV PATH /frontend/node_modules/.bin:$PATH COPY package.json /frontend/package.json COPY . /frontend/ RUN npm install --

这是我项目前端的
Dockerfile

我把它作为服务之一放在我的
docker compose.yml
文件中,当我运行
docker compose up-d--build
时,它会给我

FROM node:latest

WORKDIR /frontend/

ENV PATH /frontend/node_modules/.bin:$PATH

COPY package.json /frontend/package.json
COPY . /frontend/
RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent

CMD ["npm", "run", "start"]
我的docker compose文件如下所示,供您参考:

Step 6/8 : RUN npm install --silent
 ---> Running in 09a4f59a96fa
ERROR: Service 'frontend' failed to build: The command '/bin/sh -c npm install --silent' returned a non-zero code: 1
提前谢谢

编辑:生成后前端出错


对于docker compose,我认为应该是这样

# Docker Compose
version: '3.7'

services:
  frontend:
    container_name: frontend
    build:
      context: frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    volumes:
      - '.:/frontend'
      - '/frontend/node_modules'
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    volumes:
       - .:/code
因为构建上下文是前端

第二,若你们使用的是卷,那个么你们为什么要在Dockerfile中安装和复制代码呢?如果您使用的是绑定卷,请从Dockerfile中删除它们,因为它们将被主机代码覆盖

- ./frontend/:/frontend'

对于docker compose,我认为应该是这样的

# Docker Compose
version: '3.7'

services:
  frontend:
    container_name: frontend
    build:
      context: frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    volumes:
      - '.:/frontend'
      - '/frontend/node_modules'
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    volumes:
       - .:/code
因为构建上下文是前端

第二,若你们使用的是卷,那个么你们为什么要在Dockerfile中安装和复制代码呢?如果您使用的是绑定卷,请从Dockerfile中删除它们,因为它们将被主机代码覆盖

- ./frontend/:/frontend'

尝试删除--silent以查看安装节点时发生的情况packages@ToanQuocHo谢谢我删除了
--silent
,构建工作正常。但是,在构建之后,当我
docker compose up
时,后端成功启动,但我的前端给了我一个错误,如编辑中所示。我不知道它为什么找不到包。请尝试将
CMD[“npm”,“run”,“start”]
更改为
CMD ls&&pwd
,以再次检查代码是否存在以及package.jsonthere@ToanQuocHo谢谢我发现了问题并修复了它。我真的很感激。顺便说一句,我是新来的
docker compose
,我想知道在我做
docker compose-up
之前是否每次都必须
docker compose-up-d--build
?不是真的,只要在你想重建图像时运行
--build
,这意味着只有在您对Dockfile进行更改后,才能使用
--build
创建新映像。顺便说一句,请为您的问题写一个答案,因为这可能会帮助其他面临同一问题的人(如yoursTry)删除--静默以查看安装节点时发生的情况packages@ToanQuocHo谢谢我删除了
--silent
,构建工作正常。但是,在构建之后,当我
docker compose up
时,后端成功启动,但我的前端给了我一个错误,如编辑中所示。我不知道它为什么找不到包。请尝试将
CMD[“npm”,“run”,“start”]
更改为
CMD ls&&pwd
,以再次检查代码是否存在以及package.jsonthere@ToanQuocHo谢谢我发现了问题并修复了它。我真的很感激。顺便说一句,我是新来的
docker compose
,我想知道在我做
docker compose-up
之前是否每次都必须
docker compose-up-d--build
?不是真的,只要在你想重建图像时运行
--build
,这意味着只有在您对Dockfile进行更改后,才能使用
--build
创建新映像。顺便说一句,请为你的问题写一个答案,因为这可能会帮助像你这样面临同样问题的其他人。我是Docker的新手,我不知道什么是
卷。你是说我用的
拷贝
是多余的吗?是的,拷贝有利于
生产
图像和卷有利于开发。将卷绑定到同一目录将覆盖docker映像中的所有内容。因此,我是否应删除第一行?如果您打算在生产中使用,则从docker中删除两个卷行;如果您正在开发中使用,则删除docker文件中与复制相关的两行。另外,确保卷中的上下文
-./frontend/:/frontend'
,这就是pacakge.json不在此处的原因我是Docker的新手,我不知道
卷是什么。你是说我用的
拷贝
是多余的吗?是的,拷贝有利于
生产
图像和卷有利于开发。将卷绑定到同一目录将覆盖docker映像中的所有内容。因此,我是否应删除第一行?如果您打算在生产中使用,则从docker中删除两个卷行;如果您正在开发中使用,则删除docker文件中与复制相关的两行。另外,确保卷中的上下文
-./frontend/:/frontend'
,这就是pacakge.json不在这里的原因