用户“postgres”的 Docker 密码身份验证失败

Luc*_*ras 13 postgresql docker docker-compose

我正在编写一个 docker-compose 文件来启动一些服务。但数据库服务是个麻烦制造者,我总是收到此错误:

FATAL: password authentication failed for user "postgres" DETAIL: Password does not match for user "postgres". 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: {}

Run Code Online (Sandbox Code Playgroud)

我预计会连接数据库,而不是password authentication failed for user "postgres".

Mil*_*lam 13

确保您的应用程序(而不是数据库容器)实际上正在使用POSTGRES_USERPOSTGRES_PASSWORD变量。我怀疑他们正在寻找类似DB_USER或相似的东西,因此没有获得正确的价值观。

默认情况下,每个 PostgreSQL 数据库驱动程序和管理工具都默认为该postgres用户。postgres这可以解释为什么即使没有使用环境变量也会出现错误消息。

验证的一个好方法是将 docker-compose 文件中对数据库用户的所有引用更改为类似postgres2. 我怀疑您仍然会看到应用程序抱怨密码身份验证失败postgres


Ban*_*nik 11

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

编辑:当然,停止服务也可能直到下次启动为止。或者您可以阻止该服务自动启动。

  • 谢谢您,您是救星!我一直在寻找根本原因,这终于有帮助了!另外,对我来说,只需在 msconfig 中禁用 postgresql 服务就足够了(win + R 并键入 msconfig 并按 Enter 键) (2认同)