Data Formulator 用 Docker 部署时如何挂载数据目录让凭证保险箱和工作区在容器重建后不丢失?
【免费下载链接】data-formulator🪄 Data Formulator is an interactive AI-powered data analysis system makes it easy to connect, explore and visualize data.项目地址: https://gitcode.com/GitHub_Trending/da/data-formulator
用 Docker Compose 运行 Data Formulator 时,凭证保险箱(数据库密码、访问 token 等加密凭证)和用户工作区(parquet 数据、图表会话元数据)都写入服务端的数据目录。如果容器只跑在可写层里,一旦docker compose down后重建、更换镜像或迁移服务器,这些文件会随容器一起消失:凭证无法再解密,用户图表全部丢失。本文基于仓库的迁移指南(7-server-migration-guide.md)和凭证保险箱文档(6-credential-vault.md),结合仓库实际的 docker-compose.yml 与 Dockerfile,给出挂载配置和验证方式。适用于 Data Formulator 0.7+ 的 Docker 部署。
数据目录里到底存了什么
数据目录的解析优先级为:--data-dirCLI 参数 >DATA_FORMULATOR_HOME环境变量 >~/.data_formulator(见 .env.template 中的说明)。当前生效配置可用下面命令查看:
grep DATA_FORMULATOR_HOME .env目录内必须保留的文件与丢失后果(来自迁移指南的关键文件清单):
| 文件 | 位置 | 作用 | 丢失后果 |
|---|---|---|---|
.vault_key | DATA_FORMULATOR_HOME/.vault_key | 加密凭证保险箱的 Fernet 密钥 | credentials.db中的数据库密码等凭证无法解密,不可恢复 |
credentials.db | DATA_FORMULATOR_HOME/credentials.db | 加密的凭证数据库 | 保存的数据库密码、数据源服务凭证全部丢失 |
connectors.yaml | DATA_FORMULATOR_HOME/connectors.yaml | 管理员预配置的全局数据源连接 | 数据源卡片消失 |
users/目录 | DATA_FORMULATOR_HOME/users/ | 用户工作区数据(parquet、会话元数据、个人连接) | 用户图表和数据全部丢失 |
workspaces/目录 | DATA_FORMULATOR_HOME/workspaces/ | 遗留默认工作区(旧版数据) | 同上 |
首次使用凭证保险箱时系统会自动生成.vault_key并创建credentials.db(零配置启动,见凭证保险箱文档第 2 节),所以数据目录一旦随容器被丢弃,密钥和它加密的数据会同时丢失。
仓库的 Dockerfile 里有一个关键点:镜像内将数据目录固定在/home/appuser/.data_formulator(ENV DATA_FORMULATOR_HOME=/home/appuser/.data_formulator),且容器以非 root 用户appuser运行。挂载目标必须与这个路径一致,数据才能落到卷上。
在 docker-compose.yml 中配置命名卷
仓库自带的 docker-compose.yml 已经给出正确写法,主路径就是保持这一条挂载不变:
# docker-compose.yml services: >cp .env.template .env # 编辑 .env,设置 OPENAI_API_KEY 等生产环境务必显式设定FLASK_SECRET_KEY。迁移指南明确警告:如果没有显式设定,系统每次启动都会随机生成一个临时密钥,重启后所有 Session 和 Agent 代码签名就会失效。生成方式(文档给出的命令):
python -c "import secrets; print(secrets.token_hex(32))"将输出写入.env的FLASK_SECRET_KEY=行。这个值决定浏览器登录态签名和图表代码签名的派生密钥,重建容器后若变化,用户会被踢出登录、旧图表刷新报签名错误。
(可选分支)如果使用外部 Secret Manager 管理密钥,可以改为注入环境变量CREDENTIAL_VAULT_KEY。设置后.vault_key文件将被忽略,系统直接使用环境变量中的密钥(凭证保险箱文档第 7 节)。此分支下该环境变量值同样必须在新容器中原样保留。
构建并启动:
docker compose up --build首次启动在浏览器打开http://localhost:5567确认服务正常。停止容器用docker compose down。
验证:容器重建后数据是否仍在
验证分两步:模拟一次容器重建,再按迁移指南的验证清单逐项检查。
# 停止并重建容器(命名卷 data_formulator_home 不受 down 影响) docker compose down docker compose up -d重启完成后,按 7-server-migration-guide.md 第 5 节的迁移验证表检查(下表为与"数据不丢"直接相关的条目):
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| 用户登录 | 访问页面,检查是否仍处于登录状态 | 无需重新登录(Session 未失效) |
| 已有图表 | 打开旧图表,点击刷新数据 | 正常刷新,不报签名错误 |
| 数据库连接 | 打开数据源面板,查看已保存的连接 | 显示"已连接"状态,无需重新输入密码 |
| 用户连接 | 切换到已有用户 | 用户自己创建的数据源卡片正常显示 |
如果登录正常、已保存连接无需重新输入密码、旧图表能刷新,说明.vault_key、credentials.db和users/工作区数据都完整存活于命名卷中,挂载配置验证通过。
可选:把卷迁移到另一台服务器
当任务从"本机重建"扩展到"换服务器"时,迁移指南 4.4 节给出基于临时 alpine 容器的卷导出/导入流程。下面命令中的df-data是文档示例中的卷名占位,替换为你 compose 文件里实际的卷名(本仓库默认为data_formulator_home);$(pwd)/backup指当前目录下的backup子目录,请确保该目录存在。
副作用说明:两条docker run命令都会拉取alpine镜像并创建一次性容器(--rm,退出后自动删除),只在卷和./backup目录之间搬运文件,不修改 Data Formulator 容器本身。
# 1. 导出旧容器的数据卷($DF_HOME 的卷名按实际替换) docker run --rm -v df-data:/data -v $(pwd)/backup:/backup \ alpine tar czf /backup/df-data.tar.gz -C /data . # 2. 在新服务器上创建同名卷并导入 docker volume create df-data docker run --rm -v df-data:/data -v $(pwd)/backup:/backup \ alpine tar xzf /backup/df-data.tar.gz -C /data # 3. 复制 .env 到新服务器(含 FLASK_SECRET_KEY 等),启动容器 docker compose up -d注意:.env中的FLASK_SECRET_KEY不在卷里而在宿主机,必须随卷一起带到新服务器并保持一致。另外,如果部署使用 Azure Blob 工作区后端(WORKSPACE_BACKEND=azure_blob),工作区数据在云端,迁移指南说明此时无需备份users/和workspaces/;本地后端(默认WORKSPACE_BACKEND=local)则必须完整备份整个数据目录。
已知限制
.vault_key丢失不可恢复:Vault 加密密钥(.vault_key文件中的 Fernet 密钥)丢失后,credentials.db中已保存的凭证无法恢复,处理方式只能是删除旧库、等系统生成新密钥、用户重新输入数据库密码并勾选"记住凭证"(凭证保险箱文档第 8 节、迁移指南第 6 节)。FLASK_SECRET_KEY未显式设定时同样无法恢复:用户需重新 SSO 登录,Agent 需重新执行以生成新代码签名;parquet 数据本身不受影响。- Docker 镜像内不支持
SANDBOX=docker:DEVELOPMENT.md 明确说明容器内运行 Docker sandbox 后端会失败(子容器需要挂载宿主机路径),使用 Docker 镜像时保持默认的SANDBOX=local。 - 密钥备份的最小集是整个数据目录:
$DF_HOME包含密钥、凭证库和全部工作区数据,迁移指南建议"定期备份数据目录,备份它就够了"。
继续深入可以阅读 服务器迁移指南(英文版清单见 DEVELOPMENT.md 的 Server Migration Checklist 一节)和 凭证保险箱文档,完整配置项说明在 .env.template。
【免费下载链接】data-formulator🪄 Data Formulator is an interactive AI-powered data analysis system makes it easy to connect, explore and visualize data.项目地址: https://gitcode.com/GitHub_Trending/da/data-formulator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考