Docker密码认证失败,用户为“postgres”。

13

我正在编写一个docker-compose文件来启动一些服务,但是db服务总是会出问题,我经常会收到以下错误:

FATAL: password authentication failed for user "postgres" DETAIL: 密码不符合用户 "postgres"。 匹配连接的pg_hba.conf第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: {}

我需要将数据库连接起来,而不是出现用户“postgres”的密码认证失败


1
你尝试过进入一个非db容器,安装postgres,然后尝试psql -h db -c "select 1" postgres postgres吗?我很想知道应用程序是否存储了错误的密码。 - richyen
2
我不得不删除我的卷和绑定才能使其正常工作。 - Charalamm
2个回答

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

10
在我的情况下,这是由于在 Windows 10 上后台运行的 postgres.exe 服务引起的。当我停止了该服务,从 Windows 卸载了 PostgreSQL 12 并重新启动后,我终于可以连接到 Postgres Docker 容器了。
编辑:停止服务也可能只能在下一次启动之前有效。或者您可以将该服务排除在自动启动之外。

2
谢谢你,你真是救星!我已经寻找根本原因很长时间了,这终于帮到我了!而且,对我来说只需要在msconfig中禁用postgresql服务就足够了(win + R并输入msconfig然后按回车)。 - Tim Korelov
1
@Banik, 你救了我很多时间,因为我完全忘记了我以前安装了postgres,所以要修复它并不容易!我确认禁用服务对我来说已经足够了。 - Giulio Pulina
1
在Linux上,下一次启动后也是如此。 - emilie zawadzki
1
在Linux上,下次启动后也是如此。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接