如何使用 Docker 在 Angular/Spring-Boot 应用程序中启用热重载?

How to enable hot reload in an Angular/Spring-Boot app using Docker?

提问人:thomas prevost 提问时间:11/15/2023 最后编辑:thomas prevost 更新时间:11/15/2023 访问量:24

问:

我正在使用 Angular 和 Spring-boot 构建一个全栈应用程序。由于我已将应用程序添加到 Docker,因此在修改代码时它不会重新加载。

这是我docker-compose.yml:

version: '3.7'

services:

  db:
    container_name: MyApp-db
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: MyAppDB
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql

  adminer:
    container_name: MyApp-adminer
    image: adminer:4.8.0-standalone
    restart: always
    ports:
      - "9080:8080"

  smtp4dev:
    image: rnwood/smtp4dev:v3
    restart: always
    ports:
      - "9081:80"
      - "9025:25"

  api:
    build:
      context: ./MyApp-backend
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - db
    volumes:
      - backend-data:/app
  frontend:
    build:
      context: ./MyApp-frontend
      dockerfile: Dockerfile
    ports:
      - "4200:4200"
    depends_on:
      - api
    volumes:
      - frontend-data:/app
volumes:
  mysql-data:
  backend-data:
  frontend-data:

前端的 Dockerfile:

FROM node:18 AS development

WORKDIR /app

COPY package*.json ./

RUN npm install -g node-pre-gyp
RUN npm install

COPY . .

EXPOSE 4200

CMD ["npm", "start", "--", "--poll"]

后端的 Dockerfile:

FROM maven:3.8.4-openjdk-17-slim AS development

WORKDIR /app

COPY . .

EXPOSE 8080

CMD ["mvn", "spring-boot:run"]

当我执行命令“docker-compose up -d --build”时,卷创建得很好,但它们没有检测到代码中的任何修改。如果我修改 Docker 容器内的文件代码,它运行良好。

有人有想法吗?

节点.js 启动 docker 重载

评论

1赞 David Maze 11/15/2023
我会通过在 Docker 中启动前端的依赖项,然后在主机(而不是在容器中)运行来做到这一点。这样,你就不需要绕过 Docker 的核心文件系统隔离功能来模拟本地开发环境。docker-compose up -d apinpm start -- --poll
1赞 David Maze 11/15/2023
(即使您重新构建映像,您拥有的 and 容器也会主动阻止您看到任何代码更改,我建议删除它们。volumes:apifrontend

答: 暂无答案