运行 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,您的代码同步几乎是即时的。