为何PostgreSQL Docker容器出现密码认证失败错误?
解决PostgreSQL Docker容器的密码认证失败问题
嘿,我来帮你排查这个PostgreSQL Docker的密码认证问题!你遇到的情况,大概率是两个常见问题中的一个,咱们一步步来解决:
第一个坑:端口映射配置错了
PostgreSQL容器内部默认监听的是5432端口,但你启动容器的命令里写的是 -p 5433:5433 —— 这相当于把你主机的5433端口映射到容器的5433端口,可容器里根本没服务在这个端口上运行啊!
正确的做法是把主机的5433端口映射到容器的默认5432端口,修正后的启动命令应该是这样:
sudo docker run --rm --name pg-docker -e POSTGRES_PASSWORD=docker -d -p 5433:5432 -v $HOME/amitliron/UserA/docker/volumes/postgres:/var/lib/postgresql/data postgres
第二个可能:已有数据卷的密码冲突
如果你的挂载目录 $HOME/amitliron/UserA/docker/volumes/postgres 之前已经被用过(比如之前启动过PostgreSQL容器并挂载了这个目录),那你设置的 POSTGRES_PASSWORD=docker 只会在第一次初始化数据库的时候生效,后续启动容器不会覆盖已存在的数据库用户密码。这时候你输入的docker和卷里存储的postgres用户密码不匹配,自然会认证失败。
这里有两种解决方式:
方式一:重置数据卷(会丢失现有数据,谨慎操作)
先停掉当前容器,清空卷里的旧数据,再重新启动:# 停止并删除当前容器 sudo docker stop pg-docker # 清空挂载目录的内容 sudo rm -rf $HOME/amitliron/UserA/docker/volumes/postgres/* # 用修正后的端口命令重新启动容器 sudo docker run --rm --name pg-docker -e POSTGRES_PASSWORD=docker -d -p 5433:5432 -v $HOME/amitliron/UserA/docker/volumes/postgres:/var/lib/postgresql/data postgres方式二:直接修改容器内的postgres密码(保留现有数据)
如果不想丢数据,那就进入容器直接修改密码:- 确保容器已经用正确的端口映射启动并运行
- 进入容器的bash环境:
sudo docker exec -it pg-docker bash - 切换到postgres用户并修改密码:
su - postgres psql -c "ALTER USER postgres PASSWORD 'docker';" - 退出容器后,用正确的连接命令测试:
psql -h localhost -U postgres -d postgres -p 5433
最后验证连接
把端口映射改对,并且处理好密码问题后,用这条命令连接(别忘了指定-p 5433端口):
psql -h localhost -U postgres -d postgres -p 5433
输入密码docker应该就能成功连上容器里的PostgreSQL了!
内容的提问来源于stack exchange,提问作者user3668129




