You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker部署的Angular/Spring Boot应用中启用热重载?

问题根源

你当前使用命名卷挂载容器内的/app目录,这会将容器内的代码存储到Docker管理的独立卷中,而非同步本地代码目录的修改。只有容器内的修改会作用于该卷,因此本地代码变更无法同步到容器,导致热重载失效。


解决方案

1. 修改docker-compose.yml挂载配置

将命名卷替换为本地目录绑定挂载,实现本地代码与容器目录实时同步;同时新增缓存卷存储依赖,避免重复安装:

version: '3.7'

services:
  # db/adminer/smtp4dev 服务配置保持不变

  api:
    build:
      context: ./MyApp-backend
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - db
    volumes:
      # 绑定本地后端代码目录到容器/app
      - ./MyApp-backend:/app
      # 缓存Maven依赖,避免每次启动重新下载
      - backend-maven-cache:/root/.m2

  frontend:
    build:
      context: ./MyApp-frontend
      dockerfile: Dockerfile
    ports:
      - "4200:4200"
    depends_on:
      - api
    volumes:
      # 绑定本地前端代码目录到容器/app
      - ./MyApp-frontend:/app
      # 缓存node_modules,避免本地与容器依赖冲突(如系统架构差异)
      - frontend-node-modules:/app/node_modules
    # 可选:解决权限问题,让容器用户与本地用户一致
    user: "${UID}:${GID}"

volumes:
  mysql-data:
  backend-maven-cache:
  frontend-node-modules:

2. 验证后端Spring Boot热重载配置

确保pom.xml中已引入Spring Boot DevTools依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

DevTools默认会自动检测/app目录下的代码变更并重启应用,绑定挂载后本地修改会同步到容器,即可触发热重载。

3. 前端Angular配置说明

你的前端Dockerfile已添加--poll参数,这是必要的:Docker的文件系统事件无法直接传递到容器,poll模式会定期扫描文件变化,确保能检测到本地代码修改。


生效步骤

  1. 停止当前容器:docker-compose down
  2. 重新构建并启动:docker-compose up -d --build

此时修改本地的前端/后端代码,容器会实时同步并触发热重载。

内容的提问来源于stack exchange,提问作者thomas prevost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:05:23