【发布时间】:2019-10-05 17:04:27
【问题描述】:
我的 spring-boot 应用程序的 Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/media-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/media
username: postgres
password: postgres
hikari:
connectionTimeout: 30000
这里是docker-compose.yml:
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_DB: media
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
app:
build:
context: ./
dockerfile: Dockerfile
depends_on:
- db
ports:
- "8080:8080"
运行 docker-compose up --build 会导致:
app_1 | org.postgresql.util.PSQLException:连接到 0.0.0.0:5432 拒绝了。检查主机名和端口是否正确,以及 postmaster 正在接受 TCP/IP 连接。 app_1
我的猜测是 spring 应用程序在 postgres 准备好之前尝试连接到 postgres,但我得到以下日志:
db_1 | 2019-05-18 19:05:53.692 UTC [1] LOG:数据库系统是 准备好接受连接
【问题讨论】:
-
我怀疑
0.0.0.0会起作用(而localhost肯定不会起作用,因为数据库与您的应用程序不在同一个容器中)。在 Docker Compose 中,其他服务是通过虚拟 DNS 提供的,因此您应该可以使用db。 -
所以,尝试通过
jdbc:postgresql://db:5432/media连接。 -
按照您的建议将
spring.datasource.url更改为jdbc:postgresql://db:5432/media,使其工作。谢谢。随时将您的评论变成答案,以便我接受。
标签: postgresql spring-boot docker docker-compose