返回 Bug 清单
BUG-0215project-12高已修复deploy-config
compose --env-file 与实际凭据文件漂移:backend 重建后 PostgreSQL 认证失败
发现:2026-09-30验证:2026-10-15置信度:90%
症状
docker compose up -d --force-recreate backend 后容器反复重启;日志报 FATAL: password authentication failed for user "postgres";.env.prod 明明有密码却认证失败
根因
服务器上同时存在 /root/project-11/.env(9-30 修复后,密码与 PG 数据卷初始化密码一致)和 /root/project-11/.env.prod(9-29 旧文件,POSTGRES_PASSWORD 已过期)。docker compose up --force-recreate backend 时按 Runbook 用 --env-file .env.prod 重新插值,把过期密码传进容器;此前一直未重启容器,漂移被掩盖。
修复方案
确认哪个文件与 PG 数据卷实际密码一致(对照修复记录:/data/dbug-pgdata 以 .env 的密码初始化)→ 把 .env 的 POSTGRES_PASSWORD 同步进 .env.prod(服务器端 sed 管道替换,不落明文)→ docker compose -f docker-compose.prod.yml --env-file .env.prod up -d --force-recreate backend → docker exec 检查容器内变量长度 + curl /health 验证。预防约定:生产凭据只允许存在一处(.env.prod 为唯一权威),.env 仅作本地开发,每次改密码必须同步并 recreate。
错误签名
psycopg2.OperationalError connection to server at postgres port 5432 failed: FATAL: password authentication failed for user "postgres"技术信息
来源项目
project-12
涉及文件
docker-compose.prod.yml, backend/app/core/config.py
标签
docker-compose, env-file, 凭据漂移, 双文件, postgres...