复制 package.json - Dockerfile

7

我为一个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


你的项目结构是什么? - Yuankun
2
这意味着您的上下文文件夹中没有package.json,而您已经使用了docker build。如果您使用docker build <foldername>,那么该文件夹应该在根文件夹本身具有一个package.json - Tarun Lalwani
检查你的 Docker 忽略文件并删除 ./app,只保留 /app。 - Adiii
可以使用 Docker 文件分享您的项目结构。 - Adiii
Yuankun和Adiii,这是我在我的Git上发布的结构https://github.com/wrj95/NodeDock,我正在学习Docker,感谢你们的帮助。 - Welinton Ribeiro Junior
显示剩余2条评论
3个回答

5

不要在生产环境中运行 nodemon(如果这是您尝试的内容)。 如果应用程序崩溃,您应该配置 重启。最好在 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"]

希望这能帮到您。

1

我的建议是将所有文件移动到WORKDIR,然后执行npm install

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

我做了这个,但是不知道为什么,在工作目录中找不到 package.json,然后我按照建议把 package.json 放在我的项目的根目录下,就可以正常工作了。感谢你的帮助。 - Welinton Ribeiro Junior
哦,是的,package.json 应该在项目的根目录中。不用谢。 - ferbass

1
请确保Dockerfile所在的同一目录中有package.json和server.js文件,这样就可以工作了。
当您构建docker镜像时,整个目录的内容都成为您的docker构建上下文,docker将从那里查找您从那里复制或添加的文件。
有时您可能希望防止其中一些文件被发送到构建上下文中,在这种情况下,您可以使用.dockerignore文件来指定这些文件。祝好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接