提问者:小点点

运行 Docker 镜像,无法连接数据库


我在本地电脑上使用Windows 11 x64、Java/JDK 19、Spring Boot 3、PostgreSQL 15.1。我的Dockerfile

FROM amazoncorretto:19-alpine3.16-jdk
WORKDIR /app
ARG JAR_FILE=target/spring_jwt-1.0.0-SNAPSHOT.jar
COPY ${JAR_FILE} ./app.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","app.jar"]

我的控制台日志:

org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:319) ~[postgresql-42.5.1.jar!/:42.5.1]
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.5.1.jar!/:42.5.1]
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:247) ~[postgresql-42.5.1.jar!/:42.5.1]
        at org.postgresql.Driver.makeConnection(Driver.java:434) ~[postgresql-42.5.1.jar!/:42.5.1]
        at org.postgresql.Driver.connect(Driver.java:291) ~[postgresql-42.5.1.jar!/:42.5.1]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-5.0.1.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[HikariCP-5.0.1.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[HikariCP-5.0.1.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[HikariCP-5.0.1.jar!/:na]        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-5.0.1.jar!/:na]

完整:https://gist . github . com/don huvy/0821 da 63081 F4 FD 447111 b 7 D1 c6f 2310

Docker运行

docker run -p 8081:8081 latest:latest

如何用数据库连接运行镜像?


共2个答案

匿名用户

docker容器中的localhost(< code > 127 . 0 . 0 . 1)指的是容器本身。

如果您想访问实际机器上的任何内容,您需要容器的网络堆栈才能访问它,请参阅容器网络。

对于您的示例,最简单的方法是使用主机选项:

如果对容器使用主机网络模式,则该容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络命名空间),并且容器不会分配自己的 IP 地址。例如,如果您运行绑定到端口 80 的容器并使用主机网络,则该容器的应用程序在主机 IP 地址上的端口 80 上可用。

另请参阅:Docker命令中的--net=host选项真正做什么?

匿名用户

一组

#spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/foo_db
spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/foo_db