我读过很多关于此的主题,但是没人能解决任何问题。
有人说您必须在--legacy-watch
命令中添加-L
(或nodemon
)。
其他人则显示了几种不同的配置,显然,当docker容器中的卷上的文件发生更改时,nodody确实知道您要做什么才能重启服务器。
到目前为止,这里是我的配置:
Dockerfile:
FROM node:latest
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# install nodemon globally
RUN npm install nodemon -g
# Install dependencies
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . /usr/src/app
# Exports
EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml
version: '3.1'
services:
node:
build: .
user: "node"
volumes:
- ./:/usr/src/app
ports:
- 3000:3000
depends_on:
- mongo
working_dir: /usr/src/app
environment:
- NODE_ENV=production
expose:
- "3000"
mongo:
image: mongo
expose:
- 27017
volumes:
- ./data/db:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
package.json
{
"name": "node-playground",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon -L"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"ejs": "^2.7.1",
"express": "^4.17.1",
"mongoose": "^5.7.1"
},
"devDependencies": {
"nodemon": "^1.19.2"
}
}
我也尝试了许多不同的设置。就像不全局安装nodemon
一样,仅作为项目依赖项安装。并在docker-compse.yml
上运行命令,我相信许多其他我现在不记得的命令。没有。
如果有人对此有确定性,请提供帮助。谢谢!!!
答案 0 :(得分:1)
我继续创建了一个示例容器和存储库,以说明如何实现此目标。
只需遵循以下步骤,概述了如何在nodemon
容器内使用Docker
。
Docker容器: at DockerHub
源代码: at GitHub
package.json:
{
"name": "nodemon-docker-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start:express": "node ./index.js",
"start": "nodemon"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^1.19.2"
}
}
Dockerfile:
FROM node:slim
WORKDIR /app
COPY package*.json ./
RUN apt-get update
RUN npm install
COPY . /app
# -or-
# COPY . .
EXPOSE 1337
CMD ["npm", "start"]
docker-compose.yml: (如果正在使用)
version: "3"
services:
nodemon-test:
image: oze4/nodemon-docker-test
ports:
- "1337:1337"
如何复制:
步骤1 使用DOCKER运行::如果您正在使用DOCKER COMPOSE,请跳过(如果要,请转到下面的步骤1)下拉示例Docker容器
docker run -d --name "nodemon-test" -p 1337:1337 oze4/nodemon-docker-test
步骤1 使用文档编辑器:
有关配置,请参见上面的docker-compose.yml
文件
cd /path/to/dir/that/has/your/compose/file
docker-compose up -d
第2步:验证应用是否正常
步骤3:检查容器日志,以获取基线
docker logs nodemon-test
第4步:我提供了一个bash
脚本,以使编辑文件尽可能简单。我们需要在容器上弹出一个外壳,然后运行bash
脚本(change.sh
)
docker exec -it nodemon-test /bin/bash
bash change.sh
exit
第5步:再次检查日志以确认所做的更改以及nodemon
已重新启动
docker logs nodemon-test
从上一个屏幕截图中可以看到,nodemon
在进行更改后已成功重新启动!
答案 1 :(得分:1)
好的
非常感谢MattOestreich的回答。
现在我开始工作了,我不知道它是什么,我确实按照您的设置进行了操作,但是我当然使用的是docker-compose,而且我还从中删除了一些东西。我也不再调用mongo image,因为我在Mongodb Atlas集群中设置了数据库。
我的实际配置:
Dockerfile:
FROM node:12.10
WORKDIR /app
COPY package*.json ./
RUN apt-get update
RUN npm install
COPY . /app
EXPOSE 3000
CMD ["npm", "start"]
docker-compse.yml
version: '3.1'
services:
node:
build: .
volumes:
- ./:/app
ports:
- 3000:3000
working_dir: /app
expose:
- "3000"
package.json
{
"name": "node-playground",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"dotenv": "^8.1.0",
"ejs": "^2.7.1",
"express": "^4.17.1",
"mongoose": "^5.7.1"
},
"devDependencies": {
"nodemon": "^1.19.2"
}
}
再次感谢Matt,我希望这个话题能帮助像我这样有需要的人。
答案 2 :(得分:1)
尝试一下! 这对我有用:
通过CLI,简称--legacy-watch
或-L
。更多信息here。
答案 3 :(得分:0)
Nodemon 依赖于 Chokidar,一个潜在的解决方案是通过将 CHOKIDAR_USEPOLLING
环境变量设置为 true
来使其使用轮询。
例如,您可以在 docker-compose.yml 中执行此操作:
services:
api1:
build:
context: .
dockerfile: Dockerfile
volumes:
- /app/node_modules
- ${PWD}:/app
ports:
- 80:3000
environment:
- CHOKIDAR_USEPOLLING=true