You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL搭配Docker部署出现用户密码认证失败该如何解决?

问题根因排查与解决方案

1. 核心配置错误:重复的服务定义

你的docker-compose.yaml中services节点下存在两个同名的database服务,YAML解析时后定义的配置会直接覆盖先定义的配置,最终实际生效的数据库配置为:

  • 用户名:symfony
  • 密码:secret_password
  • 默认数据库名:db_app
    你报错中尝试登录的用户名为user,和实际配置的用户名完全不匹配,这是触发认证失败的核心原因。如果你的应用连接配置中写的是user或者已被覆盖的main用户,都会直接抛出认证错误。

2. 旧数据卷残留问题

如果你之前使用错误配置启动过容器,PostgreSQL容器仅会在首次初始化时读取POSTGRES_*环境变量创建用户和数据库,后续修改配置重启容器不会更新已有数据卷内的用户信息,也会触发认证失败。

3. pg_hba.conf位置说明

PostgreSQL官方Docker镜像中pg_hba.conf默认存放在容器内的/var/lib/postgresql/data/pg_hba.conf路径,可通过以下命令查看文件内容:

docker exec -it <postgres容器名> cat /var/lib/postgresql/data/pg_hba.conf

默认配置已经允许所有密码登录,你的问题和该文件的配置无关,无需修改。


修复步骤
  • 清理重复配置:删除第一个database服务定义,仅保留Doctrine生成的那套配置即可。如果需要从宿主机或外部工具连接数据库,在保留的database服务下添加端口映射:
    ports:
      - "5432:5432"
    
  • 清理旧容器与旧数据卷:
    docker-compose down -v
    
    注意:-v参数会删除关联的数据库卷,已有数据会被清空,如有需要请先备份数据
  • 修改应用的数据库连接配置,和compose配置保持一致:
    • 容器内部访问地址:database(和服务名一致)
    • 端口:5432
    • 用户名:symfony
    • 密码:secret_password
    • 数据库名:db_app
  • 重新启动服务:
    docker-compose up -d
    

内容的提问来源于stack exchange,提问作者Lia Ah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:45:03