【问题标题】:Docker and Node: ENOENT: no such file or directory, open "package.json"Docker 和节点:ENOENT:没有这样的文件或目录,打开“package.json”
【发布时间】:2022-01-07 14:38:57
【问题描述】:

我有文件

docker-compose.yml

...
  example:
    build: 
      context: ./example
    ports:
      - 3300:3000
    networks:
      - backend
    volumes:
      - ../example/:/var/www
    container_name: example
...

./example/Dockerfile

FROM node:16

WORKDIR /var/www

RUN npm install -g react-scripts

RUN npm install

EXPOSE 3000

CMD [ "npm", "start" ]

当我跑步时

docker-compose build

得到这个错误

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

但如果我评论#RUN npm install,脚本会看到 package.json 和“npm start”工作,但我得到错误,因为没有 node_modules

“npm install”时挂载文件夹的内容在哪里?

【问题讨论】:

  • 在映像构建之后才会进行卷装载。如果你想处理本地代码,我建议使用主机节点作为比 Docker 更合适、更简单的工具。你需要将COPYpackage.json等源代码放入你的镜像之前RUN npm ci;然后你应该删除 volumes: 挂载以避免在运行容器时覆盖该代码。

标签: node.js reactjs docker


【解决方案1】:

感谢David Maze,他给了心灵的食物。

经过几次决定,对我来说最好的事情是以下

docker-compose.yml

...
  example:
    build: 
      context: ./example
    ports:
      - 3300:3000
    volumes:
      - ./example/:/var/www
    container_name: example
...

./example/Dockerfile

FROM node:16

WORKDIR /var/www

RUN npm install -g react-scripts

RUN chown -Rh node:node /var/www

USER node

EXPOSE 3000

CMD [ "sh", "-c", "npm install && npm run start" ]

此解决方案非常适合开发。 用户node 将帮助您获得主机访客

的权限

可以从主机访问文件夹node_modules并同步主机guest

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2019-07-05
    • 2019-06-24
    • 2020-09-14
    • 2020-07-28
    • 2018-01-13
    • 2021-08-02
    • 2019-04-13
    • 2019-01-19
    相关资源
    最近更新 更多