[英]nodemon not restarting server on code change in docker container
[英]Nodemon doesn't reload in docker container when files change
我閱讀了很多關於此的主題,但沒有人解決任何問題。
有人說您必須在nodemon
命令中添加--legacy-watch
(或-L
)。 其他人顯示了幾種不同的配置,顯然 nodody 真的知道當 docker 容器內的卷中的文件更改時,您必須做什么才能實現服務器重啟。
到目前為止,我的配置是:
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
包.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
運行命令,我相信還有很多我現在不記得了。 沒有。
如果有人對此有任何確定性,請提供幫助。 謝謝!!!!
嘗試一下! 這對我有用:
通過 CLI,使用--legacy-watch
或-L
簡稱。 更多信息在這里。
我繼續創建了一個示例容器和 repo 來展示如何實現這一點..
只需按照以下步驟操作,其中概述了如何在Docker
容器內使用nodemon
。
Docker 容器:在 DockerHub
源代碼:在 GitHub
包.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 RUN :如果您正在使用 DOCKER COMPOSE,請跳過(如果您使用,請轉到下面的第 1 步)下拉示例 docker 容器
docker run -d --name "nodemon-test" -p 1337:1337 oze4/nodemon-docker-test
第 1 步使用 Docker-COMPOSE :
配置見上面docker-compose.yml
文件
cd /path/to/dir/that/has/your/compose/file
docker-compose up -d
第 2 步:驗證應用程序是否有效
第 3 步:檢查容器日志,以獲取基線
docker logs nodemon-test
第 4 步:我包含了一個bash
腳本,以使編輯文件盡可能簡單。 我們需要在容器上彈出一個 shell,然后運行bash
腳本 ( change.sh
)
docker exec -it nodemon-test /bin/bash
bash change.sh
exit
第 5 步:再次檢查日志以驗證是否已進行更改並且nodemon
重新啟動
docker logs nodemon-test
正如您在最后一個屏幕截圖中看到的那樣, nodemon
更改后, nodemon
成功重啟!
好的,非常感謝 MattOestreich 的回答。
現在我開始工作了,我不知道它是什么,我確實按照您的設置進行了操作,但當然我正在使用 docker-compose 並且我還從中刪除了一些東西。 我也不再調用 mongo 圖像,因為我在 Mongodb 圖集集群中設置了數據庫。 我的實際配置: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"
包.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"
}
}
再次感謝馬特,我希望這個帖子能幫助像我這樣有需要的人。
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
Docker 文件中的更改
CMD ["npm", "start"]
更改啟動腳本
"start": "nodemon -L server.js"
構建命令
docker build . -t <containername>
使用此命令運行 docker 容器
docker run -v $(pwd):/app -p 8080:8080 -it <container Id>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.