我正在尝试在 docker 容器中使用 nodemon:
Dockerfile
FROM node:carbon
RUN npm install -g nodemon
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "nodemon" ]
构建/运行命令
docker build -t tag/apt .
docker run -p 49160:8080 -v /local/path/to/apt:/usr/src/app -d tag/apt
将本地卷附加到容器以监视代码更改会导致一些覆盖,并且 nodemon 会提示找不到 Node 模块(其中任何一个)。我该如何解决这个问题?
最佳答案
在您的 Dockerfile
中,您在复制 package*json
文件后运行 npm install
。在 /usr/src/app
中正确创建了一个 node_modules
目录,您就可以开始了。
但是,当您将本地目录挂载到 /usr/src/app
时,容器内该目录的内容将被本地版本的 Node 项目覆盖,这显然缺少node_modules
目录,导致您遇到的错误。
挂载目录后,您需要在正在运行的容器上运行 npm install
。例如你可以运行这样的东西:
docker exec -ti <containername> npm install
请注意,您必须暂时将CMD
指令更改为如下内容:
CMD ["sleep", "3600"]
为了能够进入容器。
这将导致在您的本地目录中创建一个 node_modules 目录,并且您的容器应该正确运行 nodemon(在切换回当前的 CMD
之后)。
关于node.js - Docker 容器内的 Nodemon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48325920/