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

为何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密码(保留现有数据)
    如果不想丢数据,那就进入容器直接修改密码:

    1. 确保容器已经用正确的端口映射启动并运行
    2. 进入容器的bash环境:
      sudo docker exec -it pg-docker bash
      
    3. 切换到postgres用户并修改密码:
      su - postgres
      psql -c "ALTER USER postgres PASSWORD 'docker';"
      
    4. 退出容器后,用正确的连接命令测试:
      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

火山引擎 最新活动