docker-compose 无法以 npm ERR 启动! enoent ENOENT:没有这样的文件或目录,打开'/usr/src/app/package.json'

Posted

技术标签:

【中文标题】docker-compose 无法以 npm ERR 启动! enoent ENOENT:没有这样的文件或目录,打开\'/usr/src/app/package.json\'【英文标题】:docker-compose fails to start with npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'docker-compose 无法以 npm ERR 启动! enoent ENOENT:没有这样的文件或目录,打开'/usr/src/app/package.json' 【发布时间】:2019-07-19 22:34:49 【问题描述】:

我从 docker 文件构建了一个图像来运行节点并复制到一个运行良好的简单节点快速应用程序中。我可以在其中运行容器和 bash 并复制本地文件。当我在 docker-compose 文件中使用此图像以及 mongo 图像时,容器构建但节点容器无法运行并出现错误是 package.json 丢失。

返回的错误是

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

码头文件

FROM node
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 4000
CMD [ "npm", "run", "dev"  ]

Docker-compose.yml 看起来像

version: '3'
services:
  app:
    image: gosmith/node10:latest
    container_name: report-node
    restart: always
    volumes:
      - ./:/usr/src/app
    working_dir: /usr/src/app
    depends_on:
      - mongo
    environment:
      NODE_ENV: development
    ports:
      - 4000:4000
      - 8080:8080
    command: npm run dev && npm run serve
  mongo:
    container_name: mongo
    image: mongo
    expose:
      - 27017
    ports:
      - 27037:27017
    volumes:
      - ./data:/data/db

package.json 是如何丢失的?感谢您的帮助!

【问题讨论】:

【参考方案1】:

当你的docker-compose.yml

volumes:
  - ./:/usr/src/app

它隐藏了在 Dockerfile 中完成的所有内容,并将其替换为当前目录。如果您的当前目录没有 package.json 文件(也许您将所有与 Docker 相关的内容都移到了子目录中),则会导致您看到的错误。

我个人只会删除这两行,在本地开发我的应用程序(不使用 Docker,使用每个项目的 node_modules 目录进行隔离),并且仅在我真正准备好部署 Docker 映像时才构建它。

【讨论】:

【参考方案2】:

我遇到了同样的问题。 在你的情况下这样做: 在卷中更改此- ./:/usr/src/app为此

volumes:
      - ./:/app

/app 的名字是这样的:

services:
   app:

【讨论】:

以上是关于docker-compose 无法以 npm ERR 启动! enoent ENOENT:没有这样的文件或目录,打开'/usr/src/app/package.json'的主要内容,如果未能解决你的问题,请参考以下文章

如何将 FSCrawler REST 与 docker-compose 连接起来

Apollo 网关在 docker-compose 中不起作用

无法将docker Spring-Boot应用程序与docker-compose中的mysql容器和flyway连接起来

Nodemon 无法在 Docker 上使用 package.json 中的 npm 脚本

docker-compose nodejs 在运行 docker composer 时出错。 mysql ER_NOT_SUPPORTED_AUTH_MODE

Docker-compose:npm install 成功后,node_modules 不存在于卷中