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

使用docker-compose部署Postgres实例时连接失败求助

使用docker-compose部署Postgres实例时连接失败求助

问题描述

我配置了这样的docker-compose.yml来部署Postgres和Adminer:

version: '3.1'

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: qQmhGTYnBEqfokY3p64x
      POSTGRES_PASSWORD: HydJ47qr4F7XqsFhcTsL
      POSTGRES_DB: db
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

启动后通过Adminer(localhost:8080)连接PostgreSQL,填写对应用户名、密码和数据库名db时,报错:

Unable to connect to PostgreSQL server: FATAL: password authentication failed for user "qQmhGTYnBEqfokY3p64x"

查看db容器日志,得到更细节的错误:

db_1 | 2023-09-10 13:09:20.373 UTC [33] FATAL: password authentication failed for user "qQmhGTYnBEqfokY3p64x"
db_1 | 2023-09-10 13:09:20.373 UTC [33] DETAIL: Role "qQmhGTYnBEqfokY3p64x" does not exist.

请问我哪里操作错了?


我的解答

嘿,这个坑我刚踩过没多久!问题出在Postgres的初始化机制上:那些POSTGRES_*环境变量只有在容器第一次启动、初始化数据卷的时候才会生效。

你大概率是之前已经启动过这个db容器(可能当时用的是默认用户postgres,或者其他用户名),之后修改了docker-compose.yml里的环境变量再重启,但Postgres已经把初始的用户、数据库信息存在数据卷里了,新的环境变量根本不会被读取。

给你几个简单的解决步骤:

  • 彻底清理旧容器和数据卷
    先停掉并删除当前的容器,一定要加上-v参数把关联的数据卷也删掉,不然旧数据还在:

    docker-compose down -v
    
  • 重新启动服务
    清理完之后,重新启动容器,这次Postgres会重新初始化,按照你配置的环境变量创建用户qQmhGTYnBEqfokY3p64x、数据库db,并设置对应的密码:

    docker-compose up -d
    
  • 再次尝试连接
    等个10秒左右让容器完全启动,再用Adminer去连接,应该就能成功了。

另外给你提个醒:如果以后需要修改Postgres的用户信息或者数据库配置,不能直接改docker-compose.yml就重启,除非你愿意丢弃现有数据。如果要保留数据,得手动进入容器,用SQL命令去修改用户密码或者创建新用户哦。

备注:内容来源于stack exchange,提问作者Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:23:14