返回 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...