使用Docker Compose部署PostgreSQL时遭遇零长度分隔标识符错误的问题排查求助
问题分析
从你提供的错误日志能直接定位问题核心:
ALTER USER ""test"" WITH PASSWORD E'"test"';
PostgreSQL执行初始化SQL时,用户名被错误包裹了两层双引号(""test""),密码也被转义成带引号的形式(E'"test"'),这直接触发了zero-length delimited identifier语法错误——数据库解析时会把连续双引号识别为空标识符,进而报错。
这种情况本质是环境变量的值被意外添加了额外引号导致的,虽然你尝试了不同引号写法,但可能存在一些容易忽略的隐藏因素。
解决方案
我推荐按以下步骤排查修复:
改用键值对格式定义环境变量
把docker-compose.yml里的数组形式环境变量改成键值对格式,避免YAML解析时的潜在歧义:version: "3.8" services: db: image: postgres:14.1-alpine restart: always environment: POSTGRES_USER: test POSTGRES_PASSWORD: test POSTGRES_DB: test ports: - "5432:5432" volumes: - db:/var/lib/postgresql/data volumes: db: driver: local清除现有数据卷
如果你之前尝试过启动服务,可能已经生成了包含错误初始化信息的数据卷,PostgreSQL会复用这些数据而非重新初始化。执行以下命令彻底清理:docker compose down -v之后再重新启动服务:
docker compose up升级Docker Compose版本
你当前使用的v2.10.2版本存在一些已知的环境变量解析小bug,建议升级到最新稳定版(比如v2.20+),能有效避免这类解析异常。检查文件格式细节
确认你的docker-compose.yml文件没有使用制表符(YAML仅允许空格缩进),也没有隐藏的不可打印字符——可以用文本编辑器的"显示所有字符"功能再核对一遍。
验证
完成以上步骤后重新启动服务,应该能看到PostgreSQL正常初始化的日志,不会再出现语法错误。
内容的提问来源于stack exchange,提问作者Darina
相关产品推荐
相关产品推荐

