在 Docker 容器中运行 Nodemon

Asi*_*zza 4 node.js docker nodemon docker-compose

我正在尝试使用NodeJs 和 MongoDB 这两个服务在 Docker 网络中运行Nodemon 包。

当我使用npm start运行应用程序时,nodemon 工作:我可以连接到localhost:3000并且实时更改。但是,一旦我运行npm run 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:
Run Code Online (Sandbox Code Playgroud)

docker文件

FROM node:alpine
WORKDIR /app
COPY package.json /.
RUN npm install
COPY . /app
CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)

包.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"
  }
}
Run Code Online (Sandbox Code Playgroud)

ahs*_*san 8

docker-compose.yml告诉 Docker 启动一个容器,即 Node.js 应用程序。它还告诉 Docker 挂载主机卷:

\n
    volumes:\n      - "./app:/usr/src/app/app"\n
Run Code Online (Sandbox Code Playgroud)\n

因此,Docker 会将笔记本电脑上包含代码的 ./app 目录挂载到位于 /usr/src/app/app 的容器中。

\n

一旦您在笔记本电脑/台式机上更改了代码,nodemon 就会检测到该更改并重新启动进程,而无需重建容器。为了实现这一点,您需要告诉 Docker 将入口点设置为 nodemon。在 Dockerfile 中执行此操作:

\n
FROM node:alpine\nWORKDIR /app\nCOPY . /app\n\nRUN npm install -g nodemon\nRUN npm install\n\n#Give the path of your endpoint\nENTRYPOINT ["nodemon", "/usr/src/app/server.js"]  \nCMD ["npm", "run", "dev"]\n
Run Code Online (Sandbox Code Playgroud)\n

借助主机卷和 Nodemon,您的代码同步几乎是即时的。

\n