首页 > 解决方案 > 使用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}&currentSchema=${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]

我不知道为什么,一切正常,谁能帮我弄清楚为什么会这样?

标签: postgresqlspring-bootdockerdocker-composespring-data

解决方案


尝试为用户 Postgres 定义密码

  1. docker ps

  2. docker exec -it <container_name> bash

  3. 启动查询控制台psql

  4. 定义密码ALTER ROLE postgres WITH PASSWORD 'your_pwd'

容器管理:

向上 - docker-compose up --remove-orphans --force-recreate --build PostgreSQL


推荐阅读