将 nodemon 与 docker 和 docker-compose 一起使用
Posted
技术标签:
【中文标题】将 nodemon 与 docker 和 docker-compose 一起使用【英文标题】:Use nodemon with docker and docker-compose 【发布时间】:2019-12-25 16:36:07 【问题描述】:我将 nodemon 与 docker-compose 一起使用。 这是我的 Dockerfile:
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
我的 docker-compose.yml
version: '3'
services:
app:
build: .
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
container_name: docker-node-mongo
restart: always
ports:
- 3000:3000
- 9229:9229
command: npm start
links:
- mongo
- redis
mongo:
container_name: mongo
image: mongo
ports:
- "27017:27017"
redis:
image: redis:alpine
volumes:
- /var/redis/data:/data
还有我的 package.json 脚本:
"scripts":
"start": "nodemon --inspect=0.0.0.0 index.js"
根据我工作的 docker 容器内的代码,我的代码正在更新,但我没有任何重新加载。
【问题讨论】:
你可以通过 ssh 进入容器并检查你的 package.json 吗? @federkun "name": "docker-node-mongo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": "start": "nodemon --inspect=0.0.0.0 index.js" , "keywords": [], "author": "", "license": "ISC", "dependencies": "bluebird": "^3.5.5", "body-parser": "^1.18.3", "ejs": "^2.6.1", "express": "^4.16.3", "mongoose": "^5.2.7", "nodemon": "^1.19.1", "redis": "^2.8.0"
您必须在您的 dockerfile 中添加 nodemon
作为全局变量,即 run npm install -g nodemon
@Intellidroid FROM node:10 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install -g nodemon RUN npm install COPY . . CMD ["npm", "start"]
如果你是这个意思,它就行不通了。
您是否在重新启动 docker-compose 时进行了重建? docker-compose up --build
【参考方案1】:
重启时带有inspect
的nodemon 的问题。您可以阅读更多关于问题here 的信息。您可以尝试 nodemon 团队提到的解决方法
"inspect": "kill-port --port 9229 && node --inspect=0.0.0.0:9229 build/startup.js",
"start_watch_inspect": "nodemon --delay 80ms --watch build/ build/startup.js --exec 'npm run inspect'",
如果您可以在不检查的情况下进行管理,则可以使用以下命令使其工作
"scripts":
"start": "nodemon index.js"
这将适用于挂载目录
docker run --rm -v /home/myapp:/root --name test -it testnode
或
将代码复制到容器内的 docker build 和更新文件也可以正常工作。
【讨论】:
【参考方案2】:如果您使用-L
或--legacy-watch
标志启动nodemon,它会在检测到更改时正确重新启动。 package.json
文件中的脚本是:
"scripts":
"start": "nodemon -L --inspect=0.0.0.0 index.js"
我遇到了这个解决方案作为对这个要点的评论: https://gist.github.com/ksmithut/e126f7ddb40b760487a17e8b569a77b5#gistcomment-2725750
这可以在https://github.com/remy/nodemon#application-isnt-restarting的官方文档中找到
【讨论】:
以上是关于将 nodemon 与 docker 和 docker-compose 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Webstorm- Nodemon + Typescript + Docker - 调试器已连接但断点不起作用
Nodemon 在 Windows Docker 环境中不重启