【问题标题】:package.json not found when moving from Dockerfile to docker-compose从 Dockerfile 移动到 docker-compose 时找不到 package.json
【发布时间】:2021-02-18 13:00:06
【问题描述】:

我开始了解 React 并使用 Create-React-App 创建了一个小型应用程序,该应用程序使用以下 dockerfile 在 docker 容器中运行:

FROM node:latest

WORKDIR /app

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

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install -g react-scripts@3.4.1 -g --silent

#add app to container
COPY . ./
CMD ["npm", "start"]

效果很好,我现在想将其集成到 docker-compose 工作流程中,以并排使用 asp.net 核心和此 React 应用程序运行 api 后端:

version: '3.7'
services:
  backend:
    asp.netcore
  db:
    sql2019linux
  ui:
    container_name: ui
    build:
      context: ./UI
      dockerfile: Dockerfile
    ports:
      - '8080:3000'
    volumes:
      - './:/app'
      - '/app/node_modules'

现在失败并出现节点错误:

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

后端和数据库服务即将出现。这里到底发生了什么问题,我该如何解决?

【问题讨论】:

    标签: node.js reactjs docker docker-compose


    【解决方案1】:

    我认为这可能是你的问题。

    volumes:
      - './:/app'
    

    看起来您正在将 docker-compose 文件所在的目录挂载到容器的 app 目录中,npm start 可能是在开玩笑,因为它在构建映像的 workdir 中找不到 package.json(这也是/app)。

    尝试删除卷。

    【讨论】:

    • 假设我想保留这些卷,所以对源文件的更改会被拾取并且可以热重载。
    • 使用不同的 docker 文件。一个只有你的运行时,即 node:latest 并且不重建你的代码,只是运行你的应用程序。我建议可能有比这样做更好的选择。如果您的用例是对代码进行更改。我会在本地运行我的应用程序并从我的撰写文件中公开任何依赖项/服务。如果您的应用程序代码在 UI 目录中,您可能必须挂载 ./UI:/app
    • 将工作目录更改为/usr/src/app,然后将卷映射到./usr/src/app:/app 可以解决问题,但热重载还不起作用。
    • 不确定你是否使用了一些 lib 或其他黑魔法来进行热重载 - 但是一旦容器中的进程停止,容器就完成了。您将不得不重新启动容器/服务
    • create-react-app 做到了 ootb - 我才刚刚开始我的旅程,还没有仔细研究引擎盖,所以我不能给你一个定义。回答那个。
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多