【问题标题】:Postgresql docker container connection failurePostgresql docker容器连接失败
【发布时间】:2021-03-23 11:47:47
【问题描述】:

我正在使用这行代码尝试连接(w/jdbc)到 psql docker 容器:

Connection conn = DriverManager.getConnection(
   "jdbc:postgresql://localhost:5431/postgres?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC",
               "postgres", "postgres");

db name、username 和 pw 都是 postgres。 容器是用

创建的
docker run --name practice -e POSTGRES_PASSWORD=postgres -p 5431:5431 postgres

此处出错:

org.postgresql.util.PSQLException: The connection attempt failed.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:150)
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
        at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
        at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
        at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
        at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:30)
        at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
        at org.postgresql.Driver.makeConnection(Driver.java:393)
        at org.postgresql.Driver.connect(Driver.java:267)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
        at com.dehmer.JdbcSelectTest.main(JdbcSelectTest.java:9)
Caused by: java.io.EOFException
        at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:276)
        at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:269)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:108)
        ... 11 more

docker 容器 ls:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
be8931d1621c        postgres            "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:5431->5431/tcp, 5432/tcp   practice

同一行代码将连接到我不久前创建的另一个 psql 容器,我可以看到它们之间的唯一区别是另一个在端口 5432 上(所以只需在 getConnection args 中使用 5432 并运行我的旧容器将使其工作)。我可以通过 docker cli 访问数据库,它正在运行。但我要补充一点,我对网络概念很陌生,所以我很容易在这里忽略一些东西。非常感谢任何帮助。

【问题讨论】:

    标签: java postgresql docker jdbc


    【解决方案1】:

    我认为您希望将容器端口 5432(默认 postgres 端口)发布到 localhost 端口 5431。而不是

    docker run --name practice -e POSTGRES_PASSWORD=postgres -p 5431:5431 postgres
    

    使用

    docker run --name practice -e POSTGRES_PASSWORD=postgres -p 5431:5432 postgres
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 2020-06-29
      相关资源
      最近更新 更多