在 Docker 容器中运行 Nodemon

4

我正在尝试在具有两个服务的Docker网络中运行Nodemon包,这两个服务是NodeJs和MongoDB。

当我使用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:

Dockerfile
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"
  }
}
2个回答

8

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

    volumes:
      - "./app:/usr/src/app/app"

作为结果,Docker将会挂载你的代码所在目录 ./app 到容器中的 /usr/src/app/app 目录。当你在笔记本电脑/台式机上修改了代码后,nodemon 将会检测到该变化并在不重新构建容器的情况下重新启动进程。为了实现这一点,你需要告诉 Docker 将 entrypoint 设置为 nodemon。在 Dockerfile 中进行如下操作:
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,您的代码同步几乎是即时的。

2
解决了:是因为绑定挂载的问题。
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:

  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接