我正在编写一个 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: {}
我预计会连接数据库,而不是password authentication failed for user "postgres"
.
确保您的应用程序(而不是数据库容器)实际上正在使用POSTGRES_USER
and POSTGRES_PASSWORD
变量。我怀疑他们正在寻找类似的东西DB_USER
或类似的,所以没有得到正确的值。
默认情况下,每个 PostgreSQL 数据库驱动程序和管理工具都默认为postgres
用户。这可以解释为什么错误消息会抱怨postgres
即使没有使用环境变量。
验证的一个好方法是将 docker-compose 文件中对数据库用户的所有引用更改为类似以下内容postgres2
。我怀疑您仍然会看到应用程序抱怨密码验证失败postgres
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)