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

Posted

技术标签:

【中文标题】Docker compose 未正确复制文件以运行反应应用程序【英文标题】:Docker compose not properly copying files to run react app 【发布时间】:2019-12-08 02:00:12 【问题描述】:

我正在尝试在 docker 容器内运行 create-react-app 并使用 docker-compose 自动执行 docker build/run 以最终添加其他容器,例如后端 + db。在本地文件夹中运行 docker-compose 可以正常运行,但是将上下文设置为文件夹并在父目录中运行会导致错误。

我试图让容器列出当前文件,以便查看 package.json 是否被正确复制,但 ls 和 bash 不在节点映像或容器的路径中,因此它们无法正常运行.

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

码头文件

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 之外进行实时开发)吗? 【参考方案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/normal linux 命令不起作用在上面吗? 你重建你的容器了吗?例如docker-compose build 从 docker 容器中复制所有内容后,看起来父目录中的所有内容都已复制到应用程序中。 dockerfile 似乎没有在内部遵循 ./React-Frontend 的上下文? 是的,我使用 docker-compose up --build 进行了重建 哦,如果您不想复制父目录,那么您需要将COPY ./React-Frontend 文件夹放入容器中。我已经更新了 Dockerfile

以上是关于Docker compose 未正确复制文件以运行反应应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql容器未在docker-compose文件中运行-这是为什么?

Docker-compose + Nginx SSL反向代理

docker compose的使用--在线安装未完成

使用docker-compose和https时如何让Visual Studio启动正确的URL

docker-compose未显示对代码的任何更改

Docker-Compose