Langflow 怎么在不丢数据库和 Flow 的情况下升级 Docker 镜像?
【免费下载链接】langflowLangflow is a powerful tool for building and deploying AI-powered agents and workflows.项目地址: https://gitcode.com/GitHub_Trending/la/langflow
如果你的 Langflow 跑在 Docker 里,想升到更新版本,又担心数据库和已保存的 Flow 被重置,那么官方给出的原则只有一条:让数据留在持久卷上,升级时只替换容器镜像。Docker 部署文档中的 “Upgrade the Langflow Docker image” 一节描述的就是这条路径:数据通过 Docker 卷或 bind mount 持久化在容器之外,升级后同一个卷会被重新挂回,数据库和 Flow 得以保留。
下面按“确认持久化 → 备份 → 换标签重启 → 验证 → 必要时回滚”的顺序操作。
前提:确认数据已经在持久卷上
先看你的docker-compose.yml。Langflow 数据目录和 PostgreSQL 数据目录都必须挂在卷上,不能留在容器层。文档给出的升级示例是:
services: langflow: image: langflowai/langflow:1.11.0 environment: - LANGFLOW_CONFIG_DIR=/app/langflow - LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD} volumes: - ./langflow-data:/app/langflow postgres: image: postgres:16-trixie volumes: - langflow-postgres:/var/lib/postgresql/data volumes: langflow-postgres:要点:
- Langflow 数据用 bind mount(示例为宿主机
./langflow-data到容器内/app/langflow),PostgreSQL 数据用命名卷(langflow-postgres挂到/var/lib/postgresql/data)。仓库中的示例文件 docker_example/docker-compose.yml 用的是两个命名卷langflow-data和langflow-postgres,写法等价,关键同样是数据落在卷上。 postgres:16-trixie是被固定到特定 Debian 基础镜像的写法,文档说明这样做是为了避免postgres:16标签悄悄换掉操作系统、在已有卷上触发 glibc collation 不匹配警告。如果你沿用该标签,保持一致即可。${LANGFLOW_SUPERUSER_PASSWORD}是 compose 文件的变量引用,值来自同目录.env文件中定义的这个变量(设为 Langflow 超级用户的强密码),不是让你照抄字面量。
如果你的数据目前只存在于容器可写层里,先把数据迁移到卷上(例如挂载卷后把现有数据拷入),再执行下面的升级步骤。
升级前:备份数据库并记录当前状态
镜像选择文档 把“换版本”和“换镜像 profile”都视为一次部署迁移,给出的前置检查是:
- 清点生产 Flow 用到的组件,确认目标镜像 profile 包含它们,并显式测试自定义组件和 provider 集成;
- 记录当前镜像 digest、配置和持久卷布局,并在启动新版本前备份数据库;
- 用生产数据的一份拷贝启动候选镜像,做登录、Flow 加载、Flow 执行、文件访问和 provider 凭据的冒烟测试。
如果你的部署使用长度小于 32 字符的LANGFLOW_SECRET_KEY,1.11.x release notes 明确要求初次升级时保持该 key 不变,否则已加密的凭据无法解密。
执行升级:换镜像标签并重启
主路径是 Docker Compose。把 compose 文件里的image改成目标版本标签(文档示例为langflowai/langflow:1.11.0,按你要升到的版本替换),然后:
docker compose pull docker compose up -ddocker compose up -d会用新镜像重建 langflow 容器并重新挂回原有卷。文档说明升级后“同一个卷会被重新挂回,数据库和 Flow 得以保留”,这就是不丢数据的机制:被替换的只是镜像,不是卷。
如果你是用docker run裸跑的,对应做法是先拉新镜像:
docker pull langflowai/langflow:1.11.0然后用与原来相同的卷挂载和新标签重启容器,例如:
docker run -p 7860:7860 \ -v langflow-data:/app/langflow \ -e LANGFLOW_SUPERUSER_PASSWORD=SUPERUSER_PASSWORD \ langflowai/langflow:1.11.0其中SUPERUSER_PASSWORD替换为你的强密码;-v langflow-data:/app/langflow中的langflow-data要换成你现有部署实际使用的卷(bind mount 或命名卷),这一点不能改,改了就意味着数据不随容器走了。
关于标签选择:镜像文档 建议生产部署固定版本标签(versioned tag),需要可复现时进一步固定 registry digest(image: langflowai/langflow:base-1.12.0@sha256:IMAGE_DIGEST这种形式,digest 由你按实际镜像替换),而latest、base-latest、langflow-all:latest这类移动标签适合本地评估,因为可能在不改配置的情况下选中新版本。另外注意镜像分 base / default / extended 三个 profile(分别对应langflowai/langflow:base-*、langflowai/langflow:*、langflowai/langflow-all:*),换 profile 等于改变组件清单,换版本则可能触发启动时的数据库迁移,两者都要按上面的迁移步骤处理。
验证升级结果
按文档给出的判断方式逐项确认:
- 浏览器访问
http://localhost:7860/,能正常登录并看到原有的 Flow——这是数据保留的直接体现; - 在确认健康状态和组件可用性之前,不要从仓库或部署平台删除旧镜像(镜像文档的回滚前提)。
如果升级还涉及把 default/extended profile 换成 base,只有当没有任何已保存 Flow 依赖被移除的扩展时才是安全的,这一点文档明确列为限制。
出问题时怎么回滚
回滚策略同样来自镜像文档,前提是你在升级前保留了旧版本固定镜像和数据库备份:
- 同一 Langflow 版本内只换了 profile:用未变更的持久数据和之前记录的 digest 重新部署旧镜像即可;
- 跨版本升级且新版本已跑过数据库迁移:停止候选容器,恢复升级前的数据库备份,再重新部署旧 digest;
- 不要在未经文档明确支持的情况下,让旧版本应用直接连被新版本迁移过的数据库。
可选分支:升级到自定义镜像
如果你需要的是基于某个 release 的派生镜像(文档举例是为 1.8.0 镜像补装uv,官方 1.8.0 起镜像不再自带uv/uvx,见 release notes),先基于官方镜像构建派生镜像,然后走上面完全相同的“换标签 → pull → 重启”流程,只把 compose 文件或docker run里的镜像指向你的自定义镜像。
升级到 1.11.x 时的额外注意点
1.11.x release notes 列了几项与 Docker 部署直接相关的变更:
- 官方 Docker 镜像默认
LANGFLOW_AUTO_LOGIN=false,必须在启动时设置LANGFLOW_SUPERUSER_PASSWORD(可选LANGFLOW_SUPERUSER),除非显式设LANGFLOW_AUTO_LOGIN=true;旧的langflow/langflow默认凭据不再被接受; - 打过补丁的 1.11 镜像把运行时
HOME移到/app/data:如果没设LANGFLOW_CONFIG_DIR,默认配置目录从/opt/app-root/src/.cache/langflow变为/app/data/.cache/langflow,SQLite(LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true时)跟随该目录。因此升级前要么持久化/app/data,要么把LANGFLOW_CONFIG_DIR指向你现有的数据目录,否则默认安装的数据会丢; LANGFLOW_SECRET_KEY短于 32 字符时,初次升级保持 key 不变(见上文备份一节)。
完成上述步骤后,升级就是一次“换镜像、保留卷”的常规部署操作;数据是否保留取决于卷是否真的在容器之外,回滚能力取决于升级前的数据库备份和旧镜像是否还在。
【免费下载链接】langflowLangflow is a powerful tool for building and deploying AI-powered agents and workflows.项目地址: https://gitcode.com/GitHub_Trending/la/langflow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考