You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker部署Postgres容器后使用psql连接遭遇密码认证失败问题求助

解决Postgres容器psql连接密码验证失败的问题

嘿,我来帮你捋捋问题出在哪~你遇到的FATAL: password authentication failed for user "<myUserName>"错误,核心原因很简单:Docker启动的Postgres容器默认会创建一个名为postgres的超级用户,而你用自己的<myUserName>去连接,这个用户在容器里根本不存在,自然验证失败啦。

先看你操作里的问题点

你启动容器的命令是:

docker run -e POSTGRES_PASSWORD=password -d postgres

这个命令只设置了Postgres的密码,但没有指定自定义用户名,所以容器会自动创建默认用户postgres,密码就是你设置的password。而你之后用psql <myUserName>去连接,相当于让psql尝试用本地的Windows用户名(你的<myUserName>)去登录容器里的Postgres,这显然匹配不上。

正确的连接操作方式

这里给你两种可行的连接方法:

方法一:直接进入容器内部执行psql

  1. 先确认Postgres容器正在运行:
    docker ps
    
    找到容器的ID或者名字(比如类似postgres_1这样的)
  2. 进入容器并启动psql:
    docker exec -it <容器ID/名字> psql -U postgres
    
  3. 输入你设置的密码password,就能成功登录了。

方法二:用本地psql客户端连接容器里的Postgres

如果你想用本地PostgreSQL安装目录下的psql连接,需要先修改容器启动命令,把容器的5432端口映射到本地:

  1. 先停止并删除之前的容器(如果还在运行的话):
    docker stop <容器ID/名字>
    docker rm <容器ID/名字>
    
  2. 重新启动容器,添加端口映射参数-p 5432:5432
    docker run -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres
    
  3. 切换到C:\Program Files\PostgreSQL\13\bin目录,执行连接命令:
    psql -U postgres -h localhost
    
  4. 输入密码password,就能正常连接了。

额外:如果想使用自定义用户名<myUserName>连接

如果你确实想用自己的用户名连接,可以在启动容器时添加POSTGRES_USER环境变量指定用户名:

docker run -e POSTGRES_USER=<myUserName> -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres

之后用本地psql连接的命令就是:

psql -U <myUserName> -h localhost

输入密码password就能成功登录啦。

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

火山引擎 最新活动