【问题标题】:How to change file path for package.json in Docker?如何在 Docker 中更改 package.json 的文件路径?
【发布时间】:2019-10-08 04:33:41
【问题描述】:

我在个人项目中设置 docker,但遇到了路径错误。

这是我的 Dockerfile:

FROM node:latest

WORKDIR /Users/Alex/funky-ducks/mediumrare/mediumrare

COPY ./ ./ 

RUN  npm install

CMD ["/bin/bash"]

我的 docker-compose.yml 文件:

version: '3.7'

services:
   mediumrare_docker:
      container_name: container001
      build: /Users/Alex/funky-ducks/mediumrare/mediumrare
      command: npm start
      ports:
         - "3000:3000"

这是我的目录文件结构(注意下面的docker-compose.yml“mediumrare”是前端/mediumrare_server是后端):

.
└── mediumrare
    ├── Dockerfile
    ├── README.md
    ├── docker-compose.yml
    ├── mediumrare
    │   ├── README.md
    │   ├── node_modules
    │   ├── package-lock.json
    │   ├── package.json
    │   ├── public
    │   ├── src
    │   └── yarn.lock
    ├── mediumrare_server
    │   ├── node_modules
    │   ├── package-lock.json
    │   ├── package.json
    │   └── server.js
    ├── package-lock.json
    └── package.json

我尝试在顶层目录中创建一个 package.json 文件并提交 package-lock.json 文件。

当我运行docker-compose up 时,我收到的错误消息如下:

Creating container001 ... done
Attaching to container001
container001         | npm ERR! path /Users/Alex/funky-ducks/mediumrare/mediumrare/mediumrare_server/package.json
container001         | npm ERR! code ENOENT
container001         | npm ERR! errno -2
container001         | npm ERR! syscall open
container001         | npm ERR! enoent ENOENT: no such file or directory, open '/Users/Alex/funky-ducks/mediumrare/mediumrare/mediumrare_server/package.json'
container001         | npm ERR! enoent This is related to npm not being able to find a file.
container001         | npm ERR! enoent 
container001         | 
container001         | npm ERR! A complete log of this run can be found in:
container001         | npm ERR!     /root/.npm/_logs/2019-05-21T17_39_18_298Z-debug.log
container001 exited with code 254

我看到它在构建时正在“mediumrare_server”目录中寻找 package.json 文件。然而 package.json 文件是顶部的“mediumrare”目录。为什么找不到那个文件,我该如何解决这个错误?谢谢!

【问题讨论】:

    标签: node.js postgresql docker express


    【解决方案1】:

    我在本地尝试了一个类似的代码,它工作正常。您的图像可能已过时。通过运行docker-compose up --build 重建它


    关于 Dockerfile 的几点说明

    1. 首先运行COPYpackage.jsonpackage-lock.json,运行npm install,然后运行COPY 源文件。这将使您能够利用分层缓存。
    2. 容器中的目录结构与主机上的相同吗?
    3. 您可以在 docker-compose.yml 中使用 build . 而不是完整路径

    【讨论】:

    • 好的,它已经解决了路径错误。现在它抛出一个关于为lockfileVersion:1设置“shrinkwrap”的错误,但我有lockfileVersion:0。其次,它会因为没有“脚本”而引发错误,但该脚本将位于“mediumrare_server”目录中。如何定义该路径?现在它希望我在顶级目录中的 package.json 文件中定义路径,当我这样做时它告诉我找不到 nodemon(这是真的,因为它位于“mediumrare_server”目录中)。
    • 对于第二个问题,您可以尝试更改 WORKDIR /Users/Alex/funky-ducks/mediumrare/mediumrare/mediumrare_server 然后将命令从 docker-compose 移动到 Dockerfile
    • 那行得通,现在处理我的 docker 文件中的 /bin/bash 。它被设置为 CMD ["/bin/bash", "start"]。我现在得到的错误是 /bin/bash, start: No such file or directory.
    • 我认为你需要有CMD ["npm", "start"]
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多