【问题标题】:COPY package.json - Dockerfile复制 package.json - Dockerfile
【发布时间】:2018-04-01 03:25:43
【问题描述】:

我在 Node.js 中对一个项目做了一个 Dockerfile,但发生了错误。

这是 Dockerfile:

FROM node:latest
RUN npm install nodemon -g
WORKDIR ./app
COPY package.json ./app
RUN npm install -g
COPY server.js ./app
EXPOSE 3000
CMD ["npm", "start"] 

当我尝试构建这个 Dockerfile 时,发生如下错误:

Step 4/8 : COPY package.json ./app
COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXXXXX/package.json: no such file or directory

我该如何解决?

Docker 版本 17.12.0

【问题讨论】:

  • 你的项目结构是什么?
  • 这意味着您的上下文文件夹中没有 package.jsondocker build 一起使用。您使用docker build <foldername>,那么该文件夹在根文件夹本身中应该有一个package.json
  • 检查你的 docker 忽略并删除 ./app 使它只是 /app
  • 可以与docker文件共享你的项目结构
  • Tarun Lalwani 我已将 package.json 放在其他文件夹中,我按照您的建议执行了 Dockerfile

标签: json node.js docker dockerfile


【解决方案1】:

永远不要在生产环境中运行 nodemon(如果您尝试这样做的话)。 您应该配置 restart 以防应用崩溃。最好在 docker-compose.yml 中设置为always

在您的情况下构建 Dockerfile 的最佳方法:

FROM node:latest
WORKDIR ./app
# please note, you already declared a WORKDIR, 
# therefore your files will be automaticaly pushed to ./app
COPY package.json ./
RUN npm install -g
COPY ./ ./ 
EXPOSE 3000
CMD ["npm", "start"]

希望,这会有所帮助。

【讨论】:

    【解决方案2】:

    确保您的 Dockerfile 的同一目录中有 package.json 和 server.js 文件,并且它应该可以工作。

    当您构建 docker 映像时,目录的全部内容将成为您的 docker 构建上下文,docker 会从那里找到您 COPY 或 ADD 的文件。

    您有时可能希望阻止将其中一些文件发送到构建上下文,在这种情况下,您可以使用 .dockerignore 文件来指定这些文件。祝你好运!

    【讨论】:

      【解决方案3】:

      我的建议,将所有文件移动到WORKDIR,而不是执行您的npm install

      FROM node:latest
      RUN npm install nodemon -g
      WORKDIR /app
      ADD . /app
      RUN npm install
      EXPOSE 3000
      CMD ["npm", "start"] 
      

      【讨论】:

      • 我做了这个,但是,我不知道原因,但是在workdir中没有找到package.json,然后我按照建议将package.json放在我的项目的根文件夹中并正常工作。感谢帮助人
      • 哦,是的,package.json 应该在项目的根文件夹中。不客气
      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2021-02-18
      • 2019-09-04
      • 2021-03-11
      • 2022-07-21
      • 2020-12-27
      • 2019-06-27
      相关资源
      最近更新 更多