尽管使用了 docker 主机名,但与 localhost:5432 的连接仍被拒绝

问题描述 投票:0回答:1

我很困惑,正在寻求帮助。我正在尝试对我的 Spring Boot 应用程序进行 dockerize,因此我设置了一个简单的 dockerfile 和 docker-compose。但无论我尝试什么,在构建并运行容器后,我都会遇到相同的错误:“连接到 localhost:5432 被拒绝”。我已经在互联网上查看了一堆线程,这些线程说要更改我的 spring 数据源 url 以使用数据库的服务名称而不是 localhost (因此“jdbc:postgresql://database:5432/db”而不是“jdbc: postgresql://localhost:5432/db") 但重建后,这似乎没有解决问题。我不明白我做错了什么!请帮助我。

这是我的dockerfile:

FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

这是我的 docker-compose:

services:
  backend:
    image: 'backend_festivalapp'
    container_name: 'backend_api'
    build: .
    ports:
      - '8080:8080'
    networks:
      - aad
    depends_on:
      - database
    
  database:
    image: 'postgres:latest'
    container_name: 'postgres_database'
    restart: always
    ports:
      - '${POSTGRES_PORT}:5432'
    environment:
      - 'POSTGRES_DB=${POSTGRES_DB}'
      - 'POSTGRES_USER=${POSTGRES_USERNAME}'
      - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
    expose:
      - 5432
    networks:
      - aad
    volumes:
      - 'backend_postgres:/var/lib/postgresql/data'

networks:
  aad:
volumes:
  backend_postgres:

这是我的应用程序。属性:

spring.datasource.url=jdbc:postgresql://database:5432/${POSTGRES_DB}
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.initialization-mode=always
spring.datasource.initialize=true

logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.web=DEBUG

这是我的环境文件:

POSTGRES_PORT=5432
POSTGRES_DB=aad_backend_festivalapp
POSTGRES_USERNAME=root
POSTGRES_PASSWORD=root

这是我运行

./gradlew build
、然后
docker build .
、然后
docker-compose up
:

时得到的堆栈跟踪

backend_api        | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
backend_api        |    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:342) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.jdbc.PgConnection.(PgConnection.java:263) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.Driver.makeConnection(Driver.java:443) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.Driver.connect(Driver.java:297) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-5.0.1.jar!/:na]
backend_api        |    at org.flywaydb.core.api.configuration.ClassicConfiguration.setDataSource(ClassicConfiguration.java:1094) ~[flyway-core-9.22.3.jar!/:na]
backend_api        |    at org.flywaydb.core.api.configuration.FluentConfiguration.dataSource(FluentConfiguration.java:624) ~[flyway-core-9.22.3.jar!/:na]
backend_api        |    at org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.configureDataSource(FlywayAutoConfiguration.java:185) ~[spring-boot-autoconfigure-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.flyway(FlywayAutoConfiguration.java:172) ~[spring-boot-autoconfigure-3.2.3.jar!/:3.2.3]backend_api        |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
backend_api        |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
backend_api        |    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
backend_api        |    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
backend_api        |    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:647) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:639) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165) ~[spring-beans-6.1.4.jar!/:6.1.4]  
backend_api        |    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:312) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1231) ~[spring-context-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:949) ~[spring-context-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.4.jar!/:6.1.4]
backend_api        |    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.3.jar!/:3.2.3]
backend_api        |    at com.aad.aad_backend_festivalapp.SpringbootApplication.main(SpringbootApplication.java:13) ~[!/:0.0.1-SNAPSHOT]
backend_api        |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
backend_api        |    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
backend_api        |    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
backend_api        |    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
backend_api        |    at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91) ~[app.jar:0.0.1-SNAPSHOT]
backend_api        |    at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53) ~[app.jar:0.0.1-SNAPSHOT]
backend_api        |    at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58) ~[app.jar:0.0.1-SNAPSHOT]
backend_api        | Caused by: java.net.ConnectException: Connection refused
backend_api        |    at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
backend_api        |    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
backend_api        |    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:547) ~[na:na]
backend_api        |    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) ~[na:na]
backend_api        |    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
backend_api        |    at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
backend_api        |    at org.postgresql.core.PGStream.createSocket(PGStream.java:243) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.core.PGStream.(PGStream.java:98) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:132) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:258) ~[postgresql-42.6.1.jar!/:42.6.1]
backend_api        |    ... 49 common frames omitted

spring spring-boot docker docker-compose
1个回答
0
投票

这很可能是因为您的应用程序启动速度比数据库更快。事实上,错误是连接被拒绝,这意味着它可以找到服务器,但那里还没有应用程序来处理请求。

您可以先启动数据库,然后再启动应用程序,它就会工作。

© www.soinside.com 2019 - 2024. All rights reserved.