如何配置JDBC URL实现Spring Boot容器连接Docker数据库容器
解决Spring Boot容器无法连接PostgreSQL容器的问题
针对你遇到的"Connection to localhost:5432 refused"错误,以下是具体的修复步骤:
1. 修正PostgreSQL数据卷挂载路径
你的PostgreSQL容器数据目录配置错误,默认路径是/var/lib/postgresql/data,而非/var/lib/postgres/psql。错误的挂载会导致数据库无法正常初始化,修改docker-compose.yml中postgresql服务的volumes:
volumes: - psql:/var/lib/postgresql/data
2. 确保数据源配置正确生效
虽然你在application.yml中指定了jdbc:postgresql://db:5432/postgres,但可能存在配置未加载或被覆盖的情况:
- 优先用Docker Compose环境变量强制覆盖配置,在app_service中添加:
这里用服务名environment: - SPRING_DATASOURCE_HIKARI_JDBC_URL=jdbc:postgresql://postgresql:5432/postgres - SPRING_DATASOURCE_HIKARI_PASSWORD=Access/fedora/6postgresql作为主机名(Docker Compose网络中服务名可直接解析),比容器名更可靠。 - 检查Dockerfile是否正确复制了配置文件,确保
src/main/resources/application.yml被打包到镜像中:COPY src/main/resources/application.yml /app/application.yml
3. 等待PostgreSQL服务就绪
depends_on仅保证容器启动顺序,不代表数据库服务可用。添加健康检查让Spring Boot等待数据库就绪:
修改postgresql服务:
postgresql: image: postgres:15.0 container_name: db ports: - "5432:5432" restart: unless-stopped environment: POSTGRES_PASSWORD: "Access/fedora/6" # 特殊字符用引号包裹避免解析错误 POSTGRES_DB: postgres volumes: - psql:/var/lib/postgresql/data networks: - net healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"] interval: 5s timeout: 5s retries: 5
修改app_service的depends_on:
app_service: container_name: app_service build: . ports: - "8080:8080" depends_on: postgresql: condition: service_healthy # 等待数据库健康检查通过后启动 networks: - net
4. 排查连通性与日志
- 进入Spring Boot容器,测试能否访问PostgreSQL服务:
docker exec -it app_service ping postgresql - 查看PostgreSQL容器日志,确认数据库是否正常启动:
docker logs db
内容的提问来源于stack exchange,提问作者Mansour WOLOU
相关产品推荐
相关产品推荐

