Docker的mount会破坏node.js

时间:2018-03-05 11:52:35

标签: node.js docker

我想在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应用程序以使其正常工作?

1 个答案:

答案 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