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

Docker部署SpringBoot+Hibernate应用连接PostgreSQL容器失败问题

SpringBoot + Hibernate + PostgreSQL 的Docker部署配置

我来帮你把这套基于Docker的SpringBoot应用部署配置整理得更清晰,方便后续维护和使用:

部署场景说明

当前采用两个Docker容器的架构:

  • 一个基于自定义Tomcat镜像运行SpringBoot打包的.war包
  • 一个官方PostgreSQL镜像作为数据库服务
    通过docker-compose来统一编排和管理这两个容器。

Docker Compose 完整配置文件

version: '3'
services:
  spring2:
    build:
      context: .
      dockerfile: DockerfileTomcat
    ports:
      - 8080:8080
    depends_on:
      - db
    networks:
      - datalink
  db:
    image: postgres
    ports:
      - 5432:5432
    env_file:
      - psql.env
    volumes:
      - database:/var/lib/postgresql/data
    networks:
      - datalink

networks:
  datalink:
    driver: bridge

volumes:
  database:
    driver: local

关键配置细节解析

  • Tomcat服务(spring2):

    • 基于当前目录下的DockerfileTomcat构建自定义镜像,你可以在这个Dockerfile里配置Tomcat环境、复制war包等操作
    • 端口映射8080:8080,让你可以通过主机的8080端口访问SpringBoot应用
    • depends_on: db确保数据库容器先于Tomcat容器启动,但注意它不会等待数据库服务完全就绪
    • 加入datalink自定义网络,和数据库容器处于同一网络,保证两者可以通过服务名(db)互相访问
  • PostgreSQL服务(db):

    • 使用官方postgres镜像,无需自己构建数据库镜像
    • 端口映射5432:5432,方便你用本地数据库工具直接连接容器内的PostgreSQL
    • 通过psql.env环境文件传递数据库配置,比如你可以在这个文件里定义POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB等环境变量,避免敏感信息硬编码在docker-compose文件里
    • 挂载named volume database到容器的/var/lib/postgresql/data目录,实现数据库数据的持久化,即使删除容器,数据也会保留在主机上
    • 加入datalink网络,和Tomcat容器互通,SpringBoot应用里的数据库连接地址可以直接写jdbc:postgresql://db:5432/你的数据库名

小提示:如果你的SpringBoot应用启动时需要数据库完全可用,仅靠depends_on可能不够,建议在应用代码里添加数据库连接重试逻辑,或者在docker-compose的db服务里配置healthcheck,让Tomcat容器等待数据库健康检查通过后再启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:21