我想用Postgres构建我的春季引导应用程序,在一个带有docker的坞容器中。我在构建码头组合容器时出错了。spring应用程序无法连接到Postgres db。Postgres容器按其应有的方式运行,我可以创建一个与通常为db-客户机(dbeaver)的连接。
以下是我的配置文件:
1. application.yml
server:
port: 8081
error:
include-message: always
include-binding-errors: always
spring:
datasource:
password: password
url: jdbc:postgresql://postgres:5432/trainingdb
username: user
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true2. Dockerfile
FROM openjdk:11
ADD target/training-service-1.0.0.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]3. docker-compose.yml
version: '1'
services:
app:
container_name: springboot
image: springboot
build: ./
depends_on:
- postgres
ports:
- "8081:8081"
postgres:
image: postgres:latest
ports:
- "5432:5432"
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=trainingdb我首先运行./mvnw clean package -DskipTests
来构建jar文件,然后运行docker compose up
日志消息的小片段:
springboot | at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
springboot | at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]
springboot | at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot | at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot | ... 44 common frames omitted
springboot | Caused by: java.net.UnknownHostException: postgresql
springboot | at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220) ~[na:na]
springboot | at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:na]
springboot | at java.base/java.net.Socket.connect(Socket.java:609) ~[na:na]
springboot | at org.postgresql.core.PGStream.createSocket(PGStream.java:231) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.core.PGStream.<init>(PGStream.java:95) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:98) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot | ... 58 common frames omitted
springboot |
springboot exited with code 1来自我的postgres容器的日志消息:
PostgreSQL Database directory appears to contain a database; Skipping initialization
2022-01-30 07:39:04.321 UTC [1] LOG: starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2022-01-30 07:39:04.321 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2022-01-30 07:39:04.321 UTC [1] LOG: listening on IPv6 address "::", port 5432
2022-01-30 07:39:04.327 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-01-30 07:39:04.338 UTC [27] LOG: database system was shut down at 2022-01-30 07:38:38 UTC
2022-01-30 07:39:04.349 UTC [1] LOG: database system is ready to accept connections
2022-01-30 07:42:16.689 UTC [45] LOG: invalid length of startup packet
2022-01-30 07:42:16.709 UTC [46] LOG: invalid length of startup packet
2022-01-30 07:42:16.726 UTC [47] LOG: invalid length of startup packet
2022-01-30 07:42:39.376 UTC [1] LOG: received fast shutdown request
2022-01-30 07:42:39.379 UTC [1] LOG: aborting any active transactions
2022-01-30 07:42:39.381 UTC [1] LOG: background worker "logical replication launcher" (PID 33) exited with exit code 1
2022-01-30 07:42:39.386 UTC [28] LOG: shutting down
2022-01-30 07:42:39.430 UTC [1] LOG: database system is shut down
2022-01-30 07:45:33.835 UTC [1] LOG: starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2022-01-30 07:45:33.835 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2022-01-30 07:45:33.836 UTC [1] LOG: listening on IPv6 address "::", port 5432
2022-01-30 07:45:33.841 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-01-30 07:45:33.852 UTC [26] LOG: database system was shut down at 2022-01-30 07:42:39 UTC
2022-01-30 07:45:33.861 UTC [1] LOG: database system is ready to accept connections
2022-01-30 07:48:44.550 UTC [1] LOG: received fast shutdown request
2022-01-30 07:48:44.559 UTC [1] LOG: aborting any active transactions
2022-01-30 07:48:44.564 UTC [1] LOG: background worker "logical replication launcher" (PID 32) exited with exit code 1
2022-01-30 07:48:44.572 UTC [27] LOG: shutting down
2022-01-30 07:48:44.630 UTC [1] LOG: database system is shut down
2022-01-30 07:49:05.986 UTC [1] LOG: starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2022-01-30 07:49:05.986 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2022-01-30 07:49:05.988 UTC [1] LOG: listening on IPv6 address "::", port 5432
2022-01-30 07:49:05.995 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-01-30 07:49:06.004 UTC [26] LOG: database system was shut down at 2022-01-30 07:48:44 UTC
2022-01-30 07:49:06.035 UTC [1] LOG: database system is ready to accept connections
PostgreSQL Database directory appears to contain a database; Skipping initialization
PostgreSQL Database directory appears to contain a database; Skipping initialization
``
command to start up the containers. Is there any error in my spring boot configuration ?发布于 2022-01-29 21:51:30
我认为问题在于jdbc:jdbc:postgresql://postgres:5432/trainingdb
你能试一下这个网址吗:jdbc:postgresql://localhost:5432/trainingdb
发布于 2022-01-30 00:34:15
您能否检查日志,postgre容器是否已启动并正在运行?
另外,请使用命令“docker”检查容器状态,并检查容器名称“postgres”。
https://stackoverflow.com/questions/70909376
复制相似问题