node.js - 在 NodeJs 中使用 Docker-compose 热重载

我看过很多关于 Docker-compose + Nodejs 的代码库,但它们都不够简单或基础到足以理解来自 docker-compose 的命令流。我创建了一个非常基本的 nodejs 应用程序,我打算使用容器启用热重载。

我的 package.json 看起来像:

{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
    "start": "node server.js",
    "watch": "nodemon"
},
"dependencies": {
    "express": "^4.16.1",
    "nodemon": "^2.0.7"
}
}

Dockerfile 看起来像:

FROM node:14 as base

WORKDIR /home/node/app

COPY package*.json ./

RUN npm install -g nodemon && npm install

# Bundle app source
COPY . .

EXPOSE 4000
# RUN npm run start
CMD [ "npm", "start" ]

FROM node:14 as dev

WORKDIR /home/node/app

EXPOSE 4000

CMD ["npm", "watch"]

docker-compose.yml 文件如下所示:

version: '3.7'
services:
  ts-node-docker:
    build:
      context: .
      dockerfile: Dockerfile
      target: base
    volumes:
      - ./:/home/node/app/
    container_name: ts-node-docker
    expose:
      - '4000'
    ports:
      - '4000:4000'
    command: npm run watch

我应该做哪些更改才能在此代码库中启用热重载?谢谢!

最佳答案

考虑到您仅将其用于开发。

你不应该使用音量

volumes:
      - ./:/home/node/app/

COPY

# Bundle app source
COPY . .

在一起。

只需将您的 Dockerfile 更改为

FROM node:14 as dev

WORKDIR /home/node/app

EXPOSE 4000

CMD ["npm", "watch"]

并修改package.json

"scripts": {
    "watch": "nodemon src/index.js'"
  },

https://stackoverflow.com/questions/68012893/

相关文章:

mysql - Spring Boot、Java、Docker Compose,尝试在两个容器(my

git - 如何让 Git 在 Windows 上的 RStudio 中打开提交消息?

python - 天蓝色函数 : How do I write my logs to Azure A

javascript - 如何验证 Cypress 中的悬停文本(工具提示)?

azure - Azure DevOps 中的应用程序服务名称显示未找到结果

c# - 在 UWP 中,我应该在哪里保存用户数据?

android - 在 Android 11 中录制音频的前台服务有什么意义?

typescript - 如何强制两种类型在 TypeScript 中不兼容?

python - 使用持续联系 API

swift - Table 行为中的 TextField