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

如何在本地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服务):
    docker-compose up -d postgres-db
    
    此时数据源URL同样使用jdbc: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:25:11