Docker compose未正确复制文件以运行React应用程序

3
我试图在 Docker 容器内运行 create-react-app,并使用 docker-compose 自动化构建/运行,最终添加其他容器,如后端和数据库。在本地文件夹中运行 docker-compose 可以正常工作,但是将上下文设置为该文件夹并在父目录中运行会导致错误。
我尝试让容器列出当前文件,以便查看是否正确复制了 package.json,但 ls 和 bash 不在 node 镜像或容器的路径中,因此无法正确运行。
docker-compose.yaml
version: '3.5'

services:

  dashboard-serve:
    container_name: dashboard
    build:
      context: ./React-Frontend
      dockerfile: Dockerfile
    volumes:
      - '.:/app'
      - '/app/node_modules'
    ports:
      - '3001:3000'
    environment:
      - NODE_ENV=development

dockerfile

FROM node:12.2.0-alpine

# set working directory
WORKDIR /app

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

# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install 
RUN npm install react-scripts@3.0.1 -g 

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

运行时会输出一个错误,提示找不到package.json文件。

dashboard          | npm ERR! path /app/package.json
dashboard          | npm ERR! code ENOENT
dashboard          | npm ERR! errno -2
dashboard          | npm ERR! syscall open
dashboard          | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
dashboard          | npm ERR! enoent This is related to npm not being able to find a file.
dashboard          | npm ERR! enoent 
dashboard          | 
dashboard          | npm ERR! A complete log of this run can be found in:
dashboard          | npm ERR!     /root/.npm/_logs/2019-07-30T15_55_23_780Z-debug.log
dashboard exited with code 254

你的 volumes: 指令正在覆盖容器构建序列中的所有内容,并且还阻止了将来对 package.json 文件的任何更新产生影响。你能否删除它们(并在 Docker 外进行实时开发)? - David Maze
1个回答

1

你必须将文件复制到Docker容器中。目前,你只复制了package.json文件。

FROM node:12.2.0-alpine

# set working directory
WORKDIR /app

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

# install and cache app dependencies
COPY ./React-Frontend/package.json /app/package.json
RUN npm install 
RUN npm install react-scripts@3.0.1 -g 

# Copy files into Docker container
COPY ./React-Frontend /app

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

添加了那行代码后,我仍然遇到相同的错误。有没有办法查看容器文件系统,即使它无法启动并且 bash/ls/常规 Linux 命令也无法在其中工作? - user3645925
你是否重新构建了你的容器?例如:docker-compose build - mcranston18
是的,我使用docker-compose up --build重新构建了。 - user3645925
哦,如果你不想复制父目录,那么你需要将./React-Frontend文件夹复制到容器中。我已经更新了Dockerfile。 - mcranston18
仍然无法工作,尽管确实存在,但在./React-Frontend/package.json找不到package.json。尝试将文件重置回基础设置,除了将npm start更改为“/bin/ls”,“/app”和/app之外,没有显式复制任何文件,其中包含我调用docker-compose的父目录的所有文件,即使我没有告诉它这样做。它还拒绝让我不指定构建的上下文。 - user3645925
显示剩余3条评论

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