如何在本地Docker外运行含spring-boot-docker-compose依赖的SpringBoot应用
本地Docker外运行Spring Boot应用的方法
1. 配置本地数据源
你的application.yaml中缺少数据库连接核心配置,需补充完整:
- 若本地已安装PostgreSQL,直接修改
application.yaml:spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/mydatabase username: myuser password: secret - 若不想本地安装PostgreSQL,可单独启动Docker中的PostgreSQL容器(无需启动app服务):
此时数据源URL同样使用docker-compose up -d postgres-dbjdbc:postgresql://localhost:5432/mydatabase,容器已将5432端口映射到本地。
2. 禁用Docker Compose自动启动
因添加了Docker Compose Support依赖,Spring Boot默认会尝试自动启动Docker Compose服务,需跳过该行为:
- 在
application.yaml中添加配置:spring: docker: compose: enabled: false - 或启动应用时携带命令行参数:
./gradlew bootRun --args="--spring.docker.compose.enabled=false"
3. 开启DevTools热重载
开启DevTools可避免修改代码后频繁重启应用,调整application.yaml配置:
spring: devtools: add-properties: true restart: enabled: true
Docker配置中的明显错误
1. Dockerfile冗余复制
当前Package阶段复制了整个构建目录,会导致镜像体积过大,应仅复制编译好的jar包:
# Package stage FROM eclipse-temurin:20.0.2_9-jdk ENV JAR_NAME=app-backend-0.0.1-SNAPSHOT.jar ENV APP_HOME=/usr/app/ WORKDIR $APP_HOME # 仅复制所需jar包,而非整个目录 COPY --from=BUILD $APP_HOME/build/libs/$JAR_NAME . EXPOSE 8080 ENTRYPOINT exec java -jar $APP_HOME/$JAR_NAME --spring.profiles.active=dev
2. App服务无用挂载
App服务挂载了PostgreSQL的数据卷postgres-db:/data/postgres,应用无需直接操作数据库数据文件,删除该配置即可:
services: app: # 移除以下挂载配置 # volumes: # - 'postgres-db:/data/postgres'
3. Dev Profile配置不匹配
Dockerfile的ENTRYPOINT指定了--spring.profiles.active=dev,但你的配置文件中未定义dev环境专属配置。若需区分环境,建议创建application-dev.yaml;若无需区分,可直接移除该参数。
4. App服务重启策略过于激进
开发环境下restart: always会导致容器无意义地反复重启(如数据库临时中断时),建议改为:
services: app: restart: 'no'
内容的提问来源于stack exchange,提问作者The Prototype
相关产品推荐
相关产品推荐

