使用者“postgres”的Docker密码验证失败

vlurs2pr  于 2022-11-03  发布在  Docker
关注(0)|答案(2)|浏览(310)

我正在写一个docker-compose文件来启动一些服务。但是db服务是个麻烦制造者,我总是得到这个错误:
Connection matched pg_hba.conf line 95: "host all all all md5"
我已经读了很多线程,我已经正确地设置了POSTGRES_USER和POSTGRES_PASSWORD。我还删除了以前的卷和容器,以强制postgresql重新初始化密码。但我不明白为什么它仍然不工作。
那么,强制重新初始化postgresql映像的正确方法是什么呢?这样我就可以连接到我的数据库了。
我已经看出这个错误:Connection matched pg_hba.conf line 95: "host all all all md5",我听说过postgres conf文件,但它是一个官方的容器,应该可以工作,不是吗?

version: '3'
services:
  poll:
    build: poll
    container_name: "poll"
    ports:
      - "5000:80"
    networks:
      - poll-tier
    environment:
      - REDIS_HOST=redis
    depends_on:
      - redis

  worker:
    build: worker
    container_name: "worker"
    networks:
      - back-tier
    environment:
      - REDIS_HOST=redis
      - POSTGRES_HOST=db
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
    depends_on:
      - redis
      - db

  redis:
    image: "redis:alpine"
    container_name: "redis"
    networks:
      - poll-tier
      - back-tier

  result:
    build: result
    container_name: "result"
    ports:
      - "5001:80"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
      - POSTGRES_HOST=db
      - RESULT_PORT=80
    networks:
      - result-tier
    depends_on:
      - db

  db:
    image: "postgres:alpine"
    container_name: "db"
    restart: always
    networks:
      - back-tier
      - result-tier
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB=postgres

volumes:
  db-data:
    driver: local

networks:
  poll-tier: {}
  back-tier: {}
  result-tier: {}

我应该连接数据库,而不是password authentication failed for user "postgres"

bxgwgixi

bxgwgixi1#

确保你的应用程序(不是数据库容器)实际上使用的是POSTGRES_USERPOSTGRES_PASSWORD变量。我怀疑他们正在寻找类似DB_USER或类似的变量,所以没有得到正确的值。
默认情况下,每个PostgreSQL数据库驱动程序和管理工具都默认为postgres用户。这可能解释了为什么即使没有使用环境变量,错误消息也会抱怨postgres
一个很好的验证方法是将docker-compose文件中对数据库用户的所有引用更改为类似postgres2的内容。我怀疑您仍然会看到应用程序抱怨postgres的密码验证失败。

8oomwypt

8oomwypt2#

在我的例子中,这是由Windows 10上后台运行的postgres.exe服务引起的。当我停止该服务,从Windows中卸载PostgreSQL 12,并重新启动时,我终于可以连接到Postgres Docker容器。

相关问题