使用Portainer+Traefik部署PenPot时数据库密码认证失败求助
PenPot部署PostgreSQL密码认证失败排查方案(Portainer+Traefik环境)
核心排查方向
你遇到的FATAL: password authentication failed for user "penpot"错误,和多网络配置无关——penpot-backend与postgres同属default网络,Docker默认会自动解析服务名,网络连通性不存在问题。重点排查以下几个点:
1. PostgreSQL持久化卷残留旧数据
PostgreSQL的用户、数据库仅在第一次启动时初始化。如果之前创建过postgres容器并复用了postgres_data卷,卷内会保留旧的用户密码,即使你修改POSTGRES_PASSWORD也不会覆盖已有配置。
解决步骤:
- 在Portainer中找到当前PenPot栈,停止postgres容器
- 删除
postgres_data卷(注意:此操作会清空所有数据库数据,仅适合新部署场景) - 重新启动整个栈,让postgres重新初始化用户与数据库
2. 手动验证容器间数据库连接
进入penpot-backend容器,直接测试数据库连接,确认是否真的是密码不匹配:
# 进入backend容器(替换为你的容器ID/名称) docker exec -it <penpot-backend-container-name> bash # 安装psql客户端(容器默认未预装) apt update && apt install -y postgresql-client # 测试数据库连接 psql -h postgres -U penpot -d penpot
输入配置的密码penpot,若能成功连接,说明密码本身没问题,问题出在PenPot后端的配置解析;若连接失败,回到第一步清理卷即可解决。
3. 检查PostgreSQL初始化日志
查看postgres容器的启动日志,确认初始化流程正常:
- 日志中应包含
CREATE ROLE penpot、CREATE DATABASE penpot的记录 - 确认日志无密码初始化失败相关报错
4. 修正Redis连接配置(额外问题)
你的penpot-backend配置中,PENPOT_REDIS_URI写为redis://penpot-redis/0,但redis服务名是redis,需修正为:
PENPOT_REDIS_URI=redis://redis/0
此错误虽不导致当前认证问题,但会影响PenPot的websocket通知功能,建议同步修正。
内容的提问来源于stack exchange,提问作者user5013
相关产品推荐
相关产品推荐

