gpt4 book ai didi

postgresql - Docker:Springboot容器无法连接到PostgreSql容器连接错误

转载 作者:行者123 更新时间:2023-12-01 17:19:12 25 4
gpt4 key购买 nike

我正在构建我的第一个 Springboot 2.0 应用程序。我正在尝试将我的 Springboot 应用程序放入一个 docker 容器中,并将我的 PostgresDB 放入另一个容器中。

我的 Dockerfile

    FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springboot-api-demo-0.1*.jar app.jar
RUN sh -c 'touch /app.jar'
EXPOSE 9443
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/urandom -jar /app.jar" ]

我的 docker-compose.yml 文件

version: "2.1"

services:
springboot-api-demo:
image: "fw/springboot-api-demo"
mem_limit: 1024m
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=local
- AWS_REGION=local
- ENVIRONMENT=local
- AUTH_ENABLED=false
postgres:
container_name: pgdb
image: postgres:9.6-alpine
environment:
- 'POSTGRES_ROOT_PASSWORD=postgres'
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
ports:
- "54321:5432"

我在我的 application.properties 中使用 Springboot JPA Data 2.0 和以下配置数据

spring.datasource.url= jdbc:postgresql://localhost:54321/java_learning
spring.datasource.username=postgres
spring.datasource.password=postgres

我可以测试这两个图像是否都已启动。另外,从 docker log 和 docker events 中,我看到 postgres 容器运行良好,甚至我可以访问它并且也创建了一个数据库。但是 springboot 容器启动了,但我死了,因为它无法连接到 postgress 并在下面抛出错误。

Unable to obtain connection from database: The connection attempt failed

请注意,我的主机已在端口 5432 上安装了 Postgres,这就是为什么我在 postgres 容器上进行了 54321:5432 端口映射。这是证明:) -

➜  springboot-api-demo git:(master) ✗ lsof -i:54321              
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 44345 shailendra.singh 18u IPv4 0xf62897fbdd69e31d 0t0 TCP *:54321 (LISTEN)
com.docke 44345 shailendra.singh 21u IPv6 0xf62897fbdd119975 0t0 TCP localhost:54321 (LISTEN)

➜ springboot-api-demo git:(master) ✗ lsof -i:5432
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 715 shailendra.singh 5u IPv6 0xf62897fbb43e03b5 0t0 TCP localhost:postgresql (LISTEN)
postgres 715 shailendra.singh 6u IPv4 0xf62897fbbaeea9bd 0t0 TCP localhost:postgresql (LISTEN)

我不确定问题是什么。但我的 Springboot 应用程序无法连接我的 postgres 容器,该容器在正确的凭据下运行良好。

最佳答案

尝试使用:

spring.datasource.url= jdbc:postgresql://pgdb:5432/java_learning

postgres 数据库不在本地主机上运行,​​它在具有其他 IP(尚未知)的另一个容器中运行。

值得庆幸的是,docker-compose 会自动创建一个在 docker-compose.yml 中的所有容器之间共享的网络(除非明确表示不这样做),因此您可以神奇地使用服务名称作为主机名.

此外,您的端口有一个拼写错误,Postgres 默认使用 5432,而不是 54321

关于postgresql - Docker:Springboot容器无法连接到PostgreSql容器连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61329370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com