如何在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模式会定期扫描文件变化,确保能检测到本地代码修改。
生效步骤
- 停止当前容器:
docker-compose down - 重新构建并启动:
docker-compose up -d --build
此时修改本地的前端/后端代码,容器会实时同步并触发热重载。
内容的提问来源于stack exchange,提问作者thomas prevost
相关产品推荐
相关产品推荐

