Open WebUI Docker 部署如何通过挂载 /app/backend/data 卷避免数据丢失
Open WebUI Docker 部署如何通过挂载 /app/backend/data 卷避免数据丢失【免费下载链接】open-webuiUser-friendly AI Interface (Supports Ollama, OpenAI API, ...)项目地址: https://gitcode.com/GitHub_Trending/op/open-webui用 Docker 部署 Open WebUI 时数据库、上传文档、向量库和模型缓存都写在容器内部的/app/backend/data目录中。如果docker run命令里没有挂载这个目录容器一旦被删除或重建里面的数据随之丢失。本文的完整任务就一条按仓库文档给出的方式把/app/backend/data挂载到 Docker 命名卷或 Compose 卷上启动 Open WebUI并确认服务正常、数据目录落在卷里。适用前提是宿主机已安装 Docker镜像使用仓库文档给出的ghcr.io/open-webui/open-webui系列标签。先看 /app/backend/data 里存了什么挂载前先明确保护对象。仓库中 backend/data/readme.txt 对该目录的定义是一句话docker dir for backend files (db, documents, etc.)。结合源码可以确认其中包含的内容默认数据库文件。env.py 中DATA_DIR默认为后端的data目录即镜像内的/app/backend/data随后 env.py 定义DATABASE_URL os.getenv(DATABASE_URL, fsqlite:///{DATA_DIR}/webui.db)即 SQLite 数据库webui.db就位于该目录。上传文件与缓存。config.py 中UPLOAD_DIR DATA_DIR / uploads、CACHE_DIR DATA_DIR / cache。向量数据库与模型缓存。config.py 中CHROMA_DATA_PATH f{DATA_DIR}/vector_dbDockerfile 还将 Whisper 模型、Embedding 模型、Tiktoken 缓存和 Hugging Face 缓存WHISPER_MODEL_DIR、SENTENCE_TRANSFORMERS_HOME、TIKTOKEN_CACHE_DIR、HF_HOME都指到/app/backend/data/cache下的子目录。也就是说这个卷同时承载业务数据会话、用户、上传文档和可再生的模型缓存挂载它才能同时避免“数据丢失”和“重启后重新下载模型”。主路径docker run 挂载命名卷启动README 的 Docker 安装部分有一条明确的警告见 README.mdWhen using Docker to install Open WebUI, make sure to include the-v open-webui:/app/backend/datain your Docker command. This step is crucial as it ensures your database is properly mounted and prevents any loss of data.以“Ollama 在本机”这一默认场景为例直接使用 README.md 给出的命令docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main命令各部分的用途-v open-webui:/app/backend/dataopen-webui是 Docker 命名卷的名称不是宿主机路径首次运行时由 Docker 自动创建容器内的/app/backend/data全部读写到这个卷里。这是整条命令中唯一与“避免数据丢失”直接相关的参数缺了它数据库就只存在于容器层。--add-hosthost.docker.internal:host-gateway让容器能通过host.docker.internal访问宿主机上的 Ollama。--restart always容器异常退出或宿主机重启后自动拉起配合命名卷重启不会丢数据。如果 Ollama 在另一台服务器上README 给出的对应命令改为设置-e OLLAMA_BASE_URLhttps://example.com替换为你的 Ollama 服务地址其余参数不变-v open-webui:/app/backend/data同样必须保留docker run -d -p 3000:8080 -e OLLAMA_BASE_URLhttps://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main其他官方镜像NVIDIA GPU 的:cuda、内置 Ollama 的:ollama在 README 中给出的命令也都包含同一个-v open-webui:/app/backend/data参数其中:ollama标签的命令还会额外挂载-v ollama:/root/.ollama保存 Ollama 自身的模型。仓库里的本地构建脚本 docker-run.sh 采用同一条路径docker build构建本仓库镜像后以-v ${IMAGE}:/app/backend/data卷名即open-webui启动。需要注意的是该脚本会先docker stop/docker rm同名旧容器并执行docker image prune -f清理悬空镜像副作用是删除旧容器和未使用的镜像执行前确认这些操作符合你的预期。替代路径用 docker compose 声明卷不想要单条长命令时可用仓库根目录的 docker-compose.yaml。它与 docker run 的关键差异是把卷声明成了 Compose 的命名卷文件内容已经包含挂载不需要额外修改services: open-webui: build: context: . dockerfile: Dockerfile image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main} container_name: open-webui volumes: - open-webui:/app/backend/data depends_on: - ollama ports: - ${OPEN_WEBUI_PORT-3000}:8080 environment: - OLLAMA_BASE_URLhttp://ollama:11434 - WEBUI_SECRET_KEY extra_hosts: - host.docker.internal:host-gateway restart: unless-stopped volumes: ollama: {} open-webui: {}要点volumes段的open-webui: {}声明了命名卷open-webui:/app/backend/data把该卷挂进容器OLLAMA_BASE_URLhttp://ollama:11434指向同一 Compose 项目里的ollama服务端口默认映射为${OPEN_WEBUI_PORT-3000}:8080。在该目录执行docker compose up -d即可效果与主路径一致数据落在 Compose 管理的命名卷中。如何验证部署生效文档给出的验证方式有两处浏览器访问http://localhost:3000。README 明确说明安装完成后通过该地址访问 Open WebUIdocker compose 场景下端口同样默认是 3000除非设置了OPEN_WEBUI_PORT。容器自带健康检查。Dockerfile 定义了HEALTHCHECK CMD curl --silent --fail http://localhost:${PORT:-8080}/health | jq -ne input.status true || exit 1因此docker inspect --format{{.State.Health.Status}} open-webui显示healthy即说明服务正常响应/health。数据是否真正落卷挂载参数的语义已经保证读写指向卷open-webui而卷内应出现webui.db、uploads/、cache/等前述内容这一点与 env.py、config.py 的默认路径一致。数据保护边界与易误操作不要运行 docker-cleanup.sh。脚本自身注明它执行docker compose down -v会删除项目的所有容器和全部卷注释原文警告“This will stop all containers and delete all volumes (including persistent data)”——挂载的open-webui数据卷同样会被删掉。它只适用于你明确要清空环境的情况。数据卷的保护范围是/app/backend/data。使用:ollama标签时Ollama 模型存放在另一卷ollama:/root/.ollama两份卷要分别对待。如果容器内改用 PostgreSQL 或外部向量库通过DATABASE_URL等环境变量业务数据将转移到外部服务仓库文档在 README 功能列表中提及该能力但具体外部化配置不在本文范围内本文只覆盖默认的 SQLite 本地卷方案。完成以上步骤后判定标准即http://localhost:3000能打开界面、容器健康状态为healthy、启动命令中包含-v open-webui:/app/backend/data或 Compose 中等价的卷声明。此后删除并重建容器数据库与上传文档都保留在open-webui卷中这正是 README 警告中所述“prevents any loss of data”的效果。【免费下载链接】open-webuiUser-friendly AI Interface (Supports Ollama, OpenAI API, ...)项目地址: https://gitcode.com/GitHub_Trending/op/open-webui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考