From 0e66231f95f02a1b48f4132b0844f725cf021b7a Mon Sep 17 00:00:00 2001 From: JasonOA888 Date: Fri, 13 Mar 2026 13:24:20 +0800 Subject: [PATCH] fix: persist Langflow database across container restarts Fixes #1127 - Langflow flow edits no longer lost after restart ## Problem Flow edits made in Langflow UI were being lost after container restart. The langflow service only mounted /app/flows but Langflow stores its SQLite database at /root/.langflow/ by default, which was ephemeral. ## Solution 1. Add persistent volume for Langflow data directory: - Mount ${LANGFLOW_DATA_PATH:-./langflow-data} to /root/.langflow 2. Explicitly set LANGFLOW_DATABASE_URL to ensure database location 3. Document the new LANGFLOW_DATA_PATH in .env.example ## Testing - Verified volume mount configuration - Database URL format: sqlite:////root/.langflow/langflow.db Closes #1127 --- .env.example | 5 +++++ docker-compose.yml | 2 ++ 2 files changed, 7 insertions(+) diff --git a/.env.example b/.env.example index f3bdc0f1f..6061b0531 100644 --- a/.env.example +++ b/.env.example @@ -45,6 +45,11 @@ OPENSEARCH_PASSWORD= # Default: ./opensearch-data OPENSEARCH_DATA_PATH=./opensearch-data +# Path to persist Langflow database and state (flows, credentials, settings) +# Without this volume, flow edits will be lost on container restart +# Default: ./langflow-data +LANGFLOW_DATA_PATH=./langflow-data + # OpenSearch Connection OPENSEARCH_HOST=opensearch OPENSEARCH_PORT=9200 diff --git a/docker-compose.yml b/docker-compose.yml index 68e4206ba..55ae5be4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -119,6 +119,7 @@ services: langflow: volumes: - ${OPENRAG_FLOWS_PATH:-./flows}:/app/flows:U,z + - ${LANGFLOW_DATA_PATH:-./langflow-data}:/root/.langflow:U,z image: langflowai/openrag-langflow:${OPENRAG_VERSION:-latest} build: context: . @@ -138,6 +139,7 @@ services: - WATSONX_PROJECT_ID=${WATSONX_PROJECT_ID} - OLLAMA_BASE_URL=${OLLAMA_ENDPOINT} - LANGFLOW_LOAD_FLOWS_PATH=/app/flows + - LANGFLOW_DATABASE_URL=sqlite:////root/.langflow/langflow.db - LANGFLOW_SECRET_KEY=${LANGFLOW_SECRET_KEY} - JWT=None - OWNER=None