首页 > 解决方案 > Docker 中的 PostgreSQL 容器未授权正确的密码

问题描述

我已经安排了一个 node.js 后端来连接到一个 redis 缓存和 psql 数据库。

我创建的应用程序正在运行,但我想做一些数据库管理员并尝试使用 pgAdmin 登录 - 但是,我的详细信息被拒绝了。

我认为这可能是 pgAdmin 的事情,所以我尝试在 powershell 中使用登录 URI,但又被拒绝了。

我检查了 psql 服务是否在暴露的端口上运行(以防我弄乱了 docker-compose 配置),它是......不知道从这里去哪里。

我对数据库的 docker-compose 配置是:

# PostgreSQL
postgres:
container_name: postgres
build: ./postgres
environment:
    POSTGRES_USER: admin
    POSTGRES_PASSWORD: password
    POSTGRES_URL: postgres://admin:password@localhost:5432/myapp
    POSTGRES_DB: myapp
    POSTGRES_HOST: postgres
ports:
    - "5432:5432"

我应该注意到数据库正在运行 - 我可以登录到我的前端并访问数据等......

我的登录尝试:

psql postgres://admin:password@localhost:5432/myapp

和回应:

psql: FATAL:  password authentication failed for user "admin"

标签: postgresqldockerdocker-composerelational-database

解决方案


如果不是复制粘贴问题作为环境变量,我认为您的 docker-compose 格式不正确,没有正确放置。

# PostgreSQL
postgres:
  image: postgres
  container_name: postgres
  environment:
    POSTGRES_USER: admin
    POSTGRES_PASSWORD: password
    POSTGRES_URL: postgres://admin:password@localhost:5432/myapp
    POSTGRES_DB: myapp
    POSTGRES_HOST: postgres
  ports:
    - "5432:5432"

或者你可以试试

version: '3.7'

services:

  postgresdb:
    container_name: postgres
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: appdb 
      POSTGRES_PASSWORD: 123123
    image: bitnami/postgresql:latest
    ports:
      - "5432:5432"

或者更好地向您发布 Dockerfile,因为我看到您正在构建自己的 Docker 映像,但最好使用 Postgres 的官方映像,就像我在上面发布的那样。

还将建议首先在容器 DB 上调试并验证容器 localhost 上的连接性,使用依赖容器进行调试和测试,例如首先从 nodejs 连接,这里在实际问题中丢失了。

检查您的 ENV 设置是否正确。

docker exec postgres bash -c "printenv "

或者

 docker exec postgres bash -c "printenv | grep POSTGRES_"

或者

docker exec -it postgres bash -c "psql -U admin myapp"

推荐阅读