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

PostgreSQL 12.12 Docker镜像多用户创建失败及认证问题求助

PostgreSQL 12.12 Docker镜像用户认证问题排查与解决

问题根源

官方PostgreSQL Docker镜像从未原生支持USERS_AND_DBS这个自定义环境变量。你之前在10.5版本镜像中能生效,大概率是该镜像包含了自定义的初始化脚本(通常放在/docker-entrypoint-initdb.d/目录下),用来解析这个变量并自动创建用户和数据库。而升级到12.12的官方镜像后,这个自定义逻辑被移除,导致用户U1、U2无法被正确创建,进而出现认证失败。

解决方法

改用官方镜像原生支持的初始化方式,通过添加自定义SQL脚本创建额外用户和数据库:

  1. 创建初始化SQL脚本
    在项目根目录下创建init-db文件夹,新建create-users.sql文件,写入以下内容:
-- 创建用户U1并设置密码
CREATE USER U1 WITH PASSWORD 'password';
-- 创建数据库U1并设置所有者为U1
CREATE DATABASE U1 OWNER U1;

-- 创建用户U2并设置密码
CREATE USER U2 WITH PASSWORD 'password';
-- 创建数据库U2并设置所有者为U2
CREATE DATABASE U2 OWNER U2;
  1. 修改docker-compose配置
    移除USERS_AND_DBS环境变量,添加目录挂载,将本地init-db目录挂载到容器的/docker-entrypoint-initdb.d/路径(官方镜像会自动执行该目录下的脚本,仅在首次初始化数据库时运行):
services:
  postgres:
    image: postgres:12.12
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - ./init-db:/docker-entrypoint-initdb.d/
      # 可选:挂载数据卷持久化数据库数据
      - postgres-data:/var/lib/postgresql/data
volumes:
  postgres-data:
  1. 验证修复
  • 如果是测试环境,先删除旧容器和数据卷:
    docker-compose down -v
    
  • 重新启动容器:
    docker-compose up -d
    
  • 进入容器测试用户认证:
    docker exec -it <容器ID> psql -U U1 -d U1
    

输入密码password即可正常登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:03:16