运行 Docker 容器中的 Nodemon
Running Nodemon in Docker Container
我正在尝试 运行 Nodemon 包 在一个 Docker 网络中有两个服务,NodeJs 和 MongoDB。
当我 运行 使用 npm start 的应用程序时,nodemon 工作:我可以连接到 localhost:3000我有实时的变化。但是只要我 运行 npm 运行 docker (docker-compose up --build),我就可以连接到 localhost:3000 但我无法在我的应用程序或控制台上看到实时更改。
docker-compose.yml
version: '3.7'
services:
app:
container_name: NodeJs
build: .
volumes:
- "./app:/usr/src/app/app"
ports:
- 3000:3000
mongo_db:
container_name: MongoDB
image: mongo
volumes:
- mongo_db:/data/db
ports:
- 27017:27017
volumes:
mongo_db:
docker文件
FROM node:alpine
WORKDIR /app
COPY package.json /.
RUN npm install
COPY . /app
CMD ["npm", "run", "dev"]
package.json
{
"name": "projectvintedapi",
"version": "0.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js",
"dev": "nodemon index.js",
"docker": "docker-compose up --build"
},
"license": "ISC",
"dependencies": {
"dotenv": "^16.0.0",
"express": "^4.17.3",
"mongodb": "^4.5.0",
"nodemon": "^2.0.15"
}
}
已修复:它用于绑定挂载
dockerfile
FROM node:16.13.2
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . ./
CMD ["npm", "run", "start"]
docker-compose.yml
version: '3.7'
services:
app:
container_name: NodeJs
build: .
command: npm run dev
volumes:
- .:/app
ports:
- 3000:3000
mongo_db:
container_name: MongoDB
image: mongo
volumes:
- mongo_db:/data/db
ports:
- 27017:27017
volumes:
mongo_db:
docker-compose.yml
告诉 Docker 启动一个容器,即 Node.js 应用程序。它还告诉 Docker 安装主机卷:
volumes:
- "./app:/usr/src/app/app"
因此,Docker 会将包含您的代码的笔记本电脑上的 ./app 目录挂载到位于 /usr/src/app/app 的容器中。
一旦您更改了 laptop/desktop 上的代码,nodemon 会检测到该更改并重新启动进程而不重建容器。为此,您需要告诉 Docker 将入口点设置为 nodemon。在 Docker 文件中执行此操作:
FROM node:alpine
WORKDIR /app
COPY . /app
RUN npm install -g nodemon
RUN npm install
#Give the path of your endpoint
ENTRYPOINT ["nodemon", "/usr/src/app/server.js"]
CMD ["npm", "run", "dev"]
使用主机卷和 nodemon,您的代码同步几乎是即时的。
我正在尝试 运行 Nodemon 包 在一个 Docker 网络中有两个服务,NodeJs 和 MongoDB。
当我 运行 使用 npm start 的应用程序时,nodemon 工作:我可以连接到 localhost:3000我有实时的变化。但是只要我 运行 npm 运行 docker (docker-compose up --build),我就可以连接到 localhost:3000 但我无法在我的应用程序或控制台上看到实时更改。
docker-compose.yml
version: '3.7'
services:
app:
container_name: NodeJs
build: .
volumes:
- "./app:/usr/src/app/app"
ports:
- 3000:3000
mongo_db:
container_name: MongoDB
image: mongo
volumes:
- mongo_db:/data/db
ports:
- 27017:27017
volumes:
mongo_db:
docker文件
FROM node:alpine
WORKDIR /app
COPY package.json /.
RUN npm install
COPY . /app
CMD ["npm", "run", "dev"]
package.json
{
"name": "projectvintedapi",
"version": "0.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js",
"dev": "nodemon index.js",
"docker": "docker-compose up --build"
},
"license": "ISC",
"dependencies": {
"dotenv": "^16.0.0",
"express": "^4.17.3",
"mongodb": "^4.5.0",
"nodemon": "^2.0.15"
}
}
已修复:它用于绑定挂载
dockerfile
FROM node:16.13.2
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . ./
CMD ["npm", "run", "start"]
docker-compose.yml
version: '3.7'
services:
app:
container_name: NodeJs
build: .
command: npm run dev
volumes:
- .:/app
ports:
- 3000:3000
mongo_db:
container_name: MongoDB
image: mongo
volumes:
- mongo_db:/data/db
ports:
- 27017:27017
volumes:
mongo_db:
docker-compose.yml
告诉 Docker 启动一个容器,即 Node.js 应用程序。它还告诉 Docker 安装主机卷:
volumes:
- "./app:/usr/src/app/app"
因此,Docker 会将包含您的代码的笔记本电脑上的 ./app 目录挂载到位于 /usr/src/app/app 的容器中。
一旦您更改了 laptop/desktop 上的代码,nodemon 会检测到该更改并重新启动进程而不重建容器。为此,您需要告诉 Docker 将入口点设置为 nodemon。在 Docker 文件中执行此操作:
FROM node:alpine
WORKDIR /app
COPY . /app
RUN npm install -g nodemon
RUN npm install
#Give the path of your endpoint
ENTRYPOINT ["nodemon", "/usr/src/app/server.js"]
CMD ["npm", "run", "dev"]
使用主机卷和 nodemon,您的代码同步几乎是即时的。