postgresql - 使用docker部署的postgresql镜像运行一段时间后无法验证spring应用程序
问题描述
我有一个使用 spring boot/cloud 开发的微服务项目,其中包含至少 14 种不同的服务,并使用 postgresql docker 映像作为数据库。当使用 docker compose 部署到 prod env 时,一切都像魅力一样,这是我的 docker compose:
version: '3.7'
volumes:
db-data:
name: db-data
services:
db:
image: 'postgres:11.5'
command: postgres -c 'max_connections=200'
container_name: postgres
ports:
- '5432:5432'
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
POSTGRES_PASSWORD: postgres
auth:
container_name: auth
image: auth
environment:
JAVA_OPTS: '-Xmx500m -XX:+UseSerialGC -Xss512k -XX:MaxRAM=72m'
SPRING_PROFILES_ACTIVE: prod
build:
context: ./auth
dockerfile: DockerFile
ports:
- '9100:9100'
depends_on:
- db
这是我的 application-prod.yml 服务示例:
spring:
datasource:
hikari:
maximum-pool-size: 4
url: jdbc:postgresql://postgres:5432/postgres?ApplicationName=${spring.application.name}¤tSchema=${app.database.schema-name}
driver-class-name: org.postgresql.Driver
username: postgres
password: postgres
jpa:
open-in-view: false
show-sql: true
hibernate.ddl-auto: create
generate-ddl: true
properties:
hibernate:
jdbc:
lob:
non_contextual_creation: true
output:
ansi:
enabled: detect
现在在部署 2 或 3 天后,postgres 容器开始显示此日志:
我的所有服务都显示此日志:
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:475) ~[postgresql-42.2.1.jar!/:42.2.1]
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207) ~[postgresql-42.2.1.jar!/:42.2.1]
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) [postgresql-42.2.1.jar!/:42.2.1]
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) [postgresql-42.2.1.jar!/:42.2.1]
at org.postgresql.Driver.makeConnection(Driver.java:452) [postgresql-42.2.1.jar!/:42.2.1]
at org.postgresql.Driver.connect(Driver.java:254) [postgresql-42.2.1.jar!/:42.2.1]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:365) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:194) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:460) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:697) [HikariCP-2.7.8.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:683) [HikariCP-2.7.8.jar!/:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
我不知道为什么,一切正常,谁能帮我弄清楚为什么会这样?
解决方案
尝试为用户 Postgres 定义密码
docker ps
docker exec -it <container_name> bash
启动查询控制台
psql
定义密码
ALTER ROLE postgres WITH PASSWORD 'your_pwd'
容器管理:
向上 - docker-compose up --remove-orphans --force-recreate --build PostgreSQL
推荐阅读
- java - 在 Android Studio 3.1.3 中构建 gradle 失败
- javascript - JS-Data addAction 方法抛出而不是拒绝带有错误消息的承诺
- react-native - 使用远程 MacBook 使用 XCode 构建 React Native 应用程序
- google-chrome-extension - 来自 chrome 扩展的调度事件清除事件数据传输
- python-3.x - 如何将包含 nan 的单元格的值更改为另一个特定值?
- sql - 在 sql 中对具有状态的实体进行建模,其中实体在推进状态时具有更多属性(休眠)
- python - 在 C++ 和 Python 程序中使用命名管道的 IPC 挂起
- python - xarray select\interpolate custom 1D slice out auf 多维数据(又名 zip 与 itertools.product)
- vbscript - 如何使用 VBS 创建 exe 文件
- android - 如何在博览会中获得旧证书并退出新的 apk?