我想在Docker容器中开发我的Node.js服务器应用程序,所以我不必安装数据库等依赖项。
我有一个看起来像这样的Dockerfile:
FROM node:9.7
WORKDIR /app
COPY . .
RUN yarn
EXPOSE 8080
CMD ["npm", "run", "start"]
我在Docker中构建图像后运行我的容器,如下所示:
docker run \
-v ~/folder-name:/app \
-p 8080:8080 \
image-name
我收到以下错误:
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
如果我删除-v
标志,那么它可以正常工作。似乎安装文件夹的过程妨碍了Node.js的工作。
如何在Docker中开发Node.js应用程序以使其正常工作?
答案 0 :(得分:1)
您希望在Dockerfile中使用COPY
或将您的应用程序作为卷安装在Docker容器中,而不是同时安装在同一目录中。
COPY
只会在创建容器时获取您的应用文件,并且在该容器的生命周期内不会使用您的本地文件。
Volume
会将您的本地文件夹挂载到泊坞窗容器中,因此它会与您的本地更改保持同步。
由于您希望使用Docker开发应用程序,因此您需要使用卷装入,因此当您更改文件时,它们会自动被拉入容器。
此外,您可能希望使用Nodemon在文件更改时自动重新启动应用程序。为此,您可以从Dockerfile全局安装nodemon,然后使用它启动应用程序。
示例Dockerfile:
FROM node:latest
LABEL Name=my-app Version=1.0.0
RUN npm install -g nodemon --silent
RUN npm install --production --silent
WORKDIR /usr/src/app
EXPOSE 8080
VOLUME ["/usr/src/app"]
CMD nodemon index.js