postgresql - 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"
解决方案
如果不是复制粘贴问题作为环境变量,我认为您的 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"
推荐阅读
- c# - DataGridView 不显示 MySQL 表中的数据
- python-3.x - [错误]:使用 Python3 执行多线程脚本时出现 threading.Thread() 问题
- node.js - 使用 Sinon-Chai 测试 Node JS Express 路由中具有多个回调的单个回调被调用
- postgresql - 如果查询有 WHERE 子句,则 Sequelize 原始查询返回空数组
- python-3.x - 替代 sys.exit(1) 用于在填写表单时 url 没有更改时退出测试
- eclipse - 如何在 Eclipse 代码完成时关闭 javadoc
- ios - “静态成员 '...' 不能用于类型 '...' 的实例”
- c# - 从 Entity Framework Core 访问 SQL 存储过程的安全方式
- regex - 具有排序性能的类似 MongoDb 的查询
- python - 将 PDF 保存在数据库中并从中提取 BLOB