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
- 先确认Postgres容器正在运行:
找到容器的ID或者名字(比如类似docker pspostgres_1这样的) - 进入容器并启动psql:
docker exec -it <容器ID/名字> psql -U postgres - 输入你设置的密码
password,就能成功登录了。
方法二:用本地psql客户端连接容器里的Postgres
如果你想用本地PostgreSQL安装目录下的psql连接,需要先修改容器启动命令,把容器的5432端口映射到本地:
- 先停止并删除之前的容器(如果还在运行的话):
docker stop <容器ID/名字> docker rm <容器ID/名字> - 重新启动容器,添加端口映射参数
-p 5432:5432:docker run -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres - 切换到
C:\Program Files\PostgreSQL\13\bin目录,执行连接命令:psql -U postgres -h localhost - 输入密码
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




