多数据源SpringBoot应用Docker化的docker-compose配置修改方法
PostgreSQL+MongoDB Atlas多数据源SpringBoot应用Docker Compose配置指引
核心修改逻辑
- 你使用的MongoDB为Atlas云托管服务,不需要在docker-compose中新增MongoDB容器,默认Docker网络支持容器出网访问公网的Atlas服务,仅需提前将部署机器的公网IP加入Atlas的IP白名单即可。
- 你的项目使用了自定义数据源前缀,而非SpringBoot默认的单数据源配置前缀,环境变量需要严格匹配本地
application.properties的属性路径,绑定规则为:配置项的点分隔符替换为下划线、全大写。 - PostgreSQL服务配置需要和你自定义的psql数据源的库名、账号密码对齐,不能直接套用单数据源教程里的默认库名参数。
修改后完整docker-compose.yml
version: '3.1' services: API: build: . # 直接引用同目录下的Dockerfile构建镜像,也可以替换为你提前构建好的镜像名 ports: - "8080:8080" depends_on: PostgreSQL: condition: service_healthy environment: # 对齐自定义PostgreSQL数据源配置 - SPRING_DS_PSQL_DATASOURCE_JDBC_URL=jdbc:postgresql://PostgreSQL:5432/devicestatspsql - SPRING_DS_PSQL_DATASOURCE_USERNAME=替换为你的PostgreSQL账号 - SPRING_DS_PSQL_DATASOURCE_PASSWORD=替换为你的PostgreSQL密码 # 对齐MongoDB Atlas配置 - SPRING_DATA_MONGODB_USERS_MONGO_ATLAS_URI=替换为你的MongoDB Atlas完整连接串 # JPA通用配置 - SPRING_JPA_GENERATE_DDL=true - SPRING_JPA_SHOW_SQL=true restart: unless-stopped PostgreSQL: image: postgres:15-alpine # 建议指定固定版本,避免默认拉取latest出现版本兼容问题 ports: - "5432:5432" environment: - POSTGRES_PASSWORD=和上方API配置的PostgreSQL密码保持一致 - POSTGRES_USER=和上方API配置的PostgreSQL账号保持一致 - POSTGRES_DB=devicestatspsql # 和你本地配置的数据库名一致 volumes: - psql_data:/var/lib/postgresql/data # 持久化数据库数据,避免容器重启数据丢失 healthcheck: test: ["CMD-SHELL", "pg_isready -U 替换为你的PostgreSQL账号 -d devicestatspsql"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped volumes: psql_data:
配套Dockerfile参考
多数据源场景下SpringBoot应用的镜像构建逻辑和单数据源完全一致,不需要做特殊修改,同目录下新增Dockerfile即可:
# 按需选择和你本地一致的JDK版本 FROM eclipse-temurin:17-jre-alpine WORKDIR /app # 提前执行mvn clean package将jar包生成在target目录 COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
注意事项
- 如果后续需要将MongoDB从Atlas切换为容器化自部署,仅需在services下新增MongoDB服务,将API中配置的MongoDB连接串地址改为对应MongoDB服务名即可,其他逻辑无需调整。
- 如果启动后出现MongoDB连接失败,优先检查Atlas白名单配置、连接串是否包含正确的账号密码、容器所在网络是否限制公网出方向访问。
- 环境变量中的自定义前缀
ds-psql在转环境变量时需要去掉横杠写成DS_PSQL,避免SpringBoot绑定失败。
内容的提问来源于stack exchange,提问作者kratia
相关产品推荐
相关产品推荐

