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

docker-compose用secrets部署Metabase+PostgreSQL后无法连接导出备份

问题根因

官方PostgreSQL Docker镜像的POSTGRES_USER、POSTGRES_PASSWORD环境变量默认直接传入参数值作为用户名/密码,你配置时直接填写了secret文件路径,数据库初始化时超级用户被创建为字符串/run/secrets/db_user,默认的postgres角色并没有生成,所以你使用root、postgres用户登录都会报角色不存在错误。

解决方案

步骤1:获取真实的用户名密码

进入PostgreSQL容器读取secret文件的实际内容:

docker-compose exec postgres-secrets bash
# 读取实际用户名
cat /run/secrets/db_user
# 读取实际密码
cat /run/secrets/db_password

步骤2:导出数据库备份

你可以选择两种方式导出:

  • 容器内导出:
pg_dump -U $(cat /run/secrets/db_user) -d metabase -f /tmp/metabase_backup.sql

执行时输入刚才读取到的密码即可,导出的备份文件存放在容器的/tmp/metabase_backup.sql路径,你可以用docker cp命令复制到宿主机。

  • 宿主机直接导出(更便捷):
    直接在宿主机执行以下命令,备份文件会直接生成在当前工作目录:
docker-compose exec -T postgres-secrets pg_dump -U "$(cat db_user.txt)" -d metabase > metabase_backup.sql

(可选)修复配置避免后续问题

PostgreSQL 14及以上版本的官方镜像支持*_FILE后缀的环境变量,会自动读取对应路径文件的内容作为配置值,你可以修改docker-compose中postgres服务的环境变量部分:

environment:
  POSTGRES_USER_FILE: /run/secrets/db_user
  POSTGRES_DB: metabase
  POSTGRES_PASSWORD_FILE: /run/secrets/db_password

修改后重启服务即可,后续可以直接用secret文件中存储的用户名登录操作数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:39:02