RAGFlow 国内源最小部署说明
面向国内网络的 RAGFlow Docker Compose 本地/内网最小部署:默认拓扑为 DOC_ENGINE=elasticsearch + DEVICE=cpu,镜像与文档对齐 v0.26.4。文中给出华为云 SWR / ddn-k8s 镜像替换、必改配置、端口冲突、启动验证、可选组件与常见故障速查。
参考与延伸阅读:
目录
一、宿主机前提条件
| 项目 | 要求 | 说明 |
|---|
| CPU | ≥ 4 核 | 知识图谱建议更高 |
| 内存 | ≥ 16 GB | 知识图谱建议 32GB+ |
| 磁盘 | ≥ 50 GB | 另算镜像与数据卷 |
| Docker | ≥ 24.0.0 | |
| Docker Compose | ≥ v2.26.1 | |
| 架构 | x86_64 / amd64 | 官方镜像不提供 ARM64 |
vm.max_map_count | ≥ 262144 | 使用 Elasticsearch 时必须(WSL2/Linux) |
| gVisor | 可选 | 仅启用 Sandbox 时需要 |
Linux / WSL2:
1
2
3
| sudo sysctl -w vm.max_map_count=262144
# 永久生效:在 /etc/sysctl.conf 增加
# vm.max_map_count=262144
|
二、最小部署组件与国内镜像
默认 COMPOSE_PROFILES=elasticsearch,cpu,只需 5 个镜像:
| # | 组件 | 作用 | Profile | 官方镜像(改前) | 国内华为镜像(改后) |
|---|
| 1 | RAGFlow 主服务 | Web UI + API + 任务执行 | cpu | infiniflow/ragflow:v0.26.4 | swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4 |
| 2 | MySQL 8.0 | 元数据、用户、知识库配置 | 始终启动 | mysql:8.0.39 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39 |
| 3 | MinIO | 上传文件 / 对象存储 | 始终启动 | pgsty/minio:RELEASE.2026-03-25T00-00-00Z | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pgsty/minio:RELEASE.2026-03-25T00-00-00Z |
| 4 | Redis (Valkey) | 缓存、队列、Embedding 缓存 | 始终启动 | valkey/valkey:8 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8 |
| 5 | Elasticsearch | 向量检索 / 文档索引 / 知识图谱存储 | elasticsearch | elasticsearch:8.11.3 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:8.11.3 |
2.1 一键拉取
1
2
3
4
5
| docker pull swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pgsty/minio:RELEASE.2026-03-25T00-00-00Z
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:8.11.3
|
或在 docker/ 目录:
1
2
| cd docker
docker compose -f docker-compose.yml pull
|
2.2 最小部署不需要拉
| 镜像 / 服务 | 原因 |
|---|
| TEI | 未启用 tei-cpu / tei-gpu |
| DeepDoc 独立服务 | 未启用 deepdoc;默认主容器内联 ONNX |
| Sandbox | 未启用 sandbox |
| NATS | 未启用 ragflow-go |
| Kibana | 未启用 kibana |
| Infinity / OpenSearch / OceanBase / SeekDB | 未切换 DOC_ENGINE |
三、要改哪些文件
| 文件 | 是否必须改 | 改什么 |
|---|
docker/.env | 必须 | 国内主镜像、端口冲突项;可选 TEI/Sandbox 镜像 |
docker/docker-compose-base.yml | 必须(国内拉基础镜像) | MySQL / MinIO / Redis / ES 等 image: |
docker/docker-compose.yml | 强烈建议(对齐 v0.26.4) | 去掉 --init-model-provider-tables;注释 entrypoint.sh 挂载 |
docker/entrypoint.sh | 权限 | chmod +x entrypoint.sh(内容尽量用镜像内置) |
3.1 docker/.env
| 变量 | 改前(官方) | 改后(国内最小部署) |
|---|
RAGFLOW_IMAGE | infiniflow/ragflow:v0.26.4 | swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4 |
TEI_IMAGE_CPU | infiniflow/text-embeddings-inference:cpu-1.8 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/text-embeddings-inference:cpu-1.8 |
TEI_IMAGE_GPU | infiniflow/text-embeddings-inference:1.8 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/text-embeddings-inference:1.8 |
SANDBOX_EXECUTOR_MANAGER_IMAGE | infiniflow/sandbox-executor-manager:latest | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/sandbox-executor-manager:latest |
SANDBOX_BASE_PYTHON_IMAGE | infiniflow/sandbox-base-python:latest | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/sandbox-base-python:latest |
SANDBOX_BASE_NODEJS_IMAGE | infiniflow/sandbox-base-nodejs:latest | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/sandbox-base-nodejs:latest |
HF_ENDPOINT | 注释掉 | 需要时取消注释:https://hf-mirror.com |
EXPOSE_MYSQL_PORT | 3306(示例环境常冲突) | 冲突时改为 5455 等 |
SVR_WEB_HTTP_PORT | 80(示例环境常冲突) | 冲突时改为 8080 / 8090 等 |
阿里云备选主镜像(.env 注释中常见):
1
| registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:v0.26.4
|
3.2 docker/docker-compose-base.yml
| 服务 | 改前 | 改后 |
|---|
es01 | elasticsearch:${STACK_VERSION} | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} |
mysql | mysql:8.0.39 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39 |
minio | pgsty/minio:RELEASE.2026-03-25T00-00-00Z | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pgsty/minio:RELEASE.2026-03-25T00-00-00Z |
redis | valkey/valkey:8 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8 |
opensearch01 | opensearchproject/opensearch:2.19.1 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/opensearchproject/opensearch:2.19.1 |
infinity | infiniflow/infinity:v0.7.0 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/infinity:v0.7.0 |
oceanbase | oceanbase/oceanbase-ce:4.4.1.0-100000032025101610 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/oceanbase/oceanbase-ce:4.4.1.0-100000032025101610 |
seekdb | oceanbase/seekdb:latest | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/oceanbase/seekdb:latest |
nats | nats:2.14.2 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nats:2.14.2 |
kibana | kibana:${STACK_VERSION} | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/kibana/kibana:${STACK_VERSION} |
3.3 docker/docker-compose.yml(版本对齐关键)
当本地代码新于镜像 v0.26.4,挂载宿主机 entrypoint.sh + --init-model-provider-tables 会导致:
1
| ./entrypoint.sh: line 258: tools/scripts/run_migrations.sh: No such file or directory
|
容器反复重启,8090 / 80 出现 Connection reset by peer。
| 项 | 改前 | 改后(推荐) |
|---|
command | --enable-adminserver + --init-model-provider-tables | 仅保留 --enable-adminserver,或整段注释用镜像默认启动 |
volumes 中 entrypoint.sh | ./entrypoint.sh:/ragflow/entrypoint.sh | 注释掉,使用镜像内置脚本 |
1
2
3
4
5
6
7
8
| command:
- --enable-adminserver
# - --init-model-provider-tables # v0.26.4 镜像内无此脚本,勿开
volumes:
- ./ragflow-logs:/ragflow/logs
- ./service_conf.yaml.template:/ragflow/conf/service_conf.yaml.template
# - ./entrypoint.sh:/ragflow/entrypoint.sh
|
更稳妥:代码与镜像完全对齐:
1
2
3
4
| cd /opt/ragflow-v0.26.4 # 你的部署目录
cp docker/.env docker/.env.my-backup
git checkout v0.26.4
# 再把 .env 中的国内镜像、端口改回
|
四、挂载路径与数据位置
4.1 Bind mount(相对 docker/ 目录)
| 服务 | 宿主机路径 | 容器内路径 | 用途 |
|---|
| ragflow-cpu | ./ragflow-logs | /ragflow/logs | 日志 |
| ragflow-cpu | ./service_conf.yaml.template | /ragflow/conf/service_conf.yaml.template | 后端配置模板 |
| ragflow-cpu | ./entrypoint.sh(建议注释) | /ragflow/entrypoint.sh | 启动脚本 |
| mysql | ./init.sql | /data/application/init.sql | 初始化 SQL |
| infinity(可选) | ./infinity_conf.toml | /infinity_conf.toml | Infinity 配置 |
4.2 Docker 命名卷(默认不在项目目录)
| 数据 | 卷名(在 docker/ 下启动时) | 容器内路径 | 说明 |
|---|
| MySQL 元数据 | docker_mysql_data | /var/lib/mysql | 用户 / 知识库配置 |
| 上传文件 | docker_minio_data | /data | 对象存储 |
| Redis | docker_redis_data | /data | 缓存 / 队列 |
| ES 向量 / 图谱 | docker_esdata01 | /usr/share/elasticsearch/data | 索引与知识图谱 chunk |
1
2
| docker volume ls
docker volume inspect docker_minio_data
|
Windows + Docker Desktop:数据在 WSL2 虚拟磁盘内,常见访问路径类似:
1
| \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\<卷名>\_data
|
Mountpoint(如 /var/lib/docker/volumes/.../_data)是 Docker 虚拟机内部路径,不是 Windows 盘符路径。
五、端口一览与冲突处理
5.1 默认端口
变量(.env) | 默认宿主机端口 | 容器端口 | 服务 |
|---|
SVR_WEB_HTTP_PORT | 80 | 80 | Web 界面 |
SVR_WEB_HTTPS_PORT | 443 | 443 | HTTPS |
SVR_HTTP_PORT | 9380 | 9380 | HTTP API |
ADMIN_SVR_HTTP_PORT | 9381 | 9381 | Admin API |
SVR_MCP_PORT | 9382 | 9382 | MCP |
GO_ADMIN_PORT | 9383 | 9383 | Go Admin |
GO_HTTP_PORT | 9384 | 9384 | Go API |
EXPOSE_MYSQL_PORT | 3306 | 3306 | MySQL 对外映射 |
MYSQL_PORT | 3306 | — | 容器内连接端口,一般不改 |
REDIS_PORT | 6379 | 6379 | Redis |
MINIO_PORT | 9000 | 9000 | MinIO API |
MINIO_CONSOLE_PORT | 9001 | 9001 | MinIO 控制台 |
ES_PORT | 1200 | 9200 | Elasticsearch |
5.2 常见冲突:改哪个参数
| 报错现象 | 改文件 | 改参数 | 示例 | 不要改 |
|---|
bind host port 0.0.0.0:3306 ... address already in use | .env | EXPOSE_MYSQL_PORT | 5455 | 不要改 MYSQL_PORT |
bind host port 0.0.0.0:80 ... address already in use | .env | SVR_WEB_HTTP_PORT | 8080 / 8090 | — |
| 443 被占用 | .env | SVR_WEB_HTTPS_PORT | 任意空闲 | — |
| 6379 被占用 | .env | REDIS_PORT | 6380 | — |
| 9000/9001 被占用 | .env | MINIO_PORT / MINIO_CONSOLE_PORT | — | — |
| 变量 | 含义 |
|---|
MYSQL_PORT | RAGFlow 容器通过 Docker 网络连 mysql:3306,用容器内 MySQL 时保持 3306 |
EXPOSE_MYSQL_PORT | 映射到宿主机的端口,冲突只改它 |
1
| ss -tlnp | grep -E '3306|80|443|6379|9000|1200'
|
改完后:
1
2
| docker compose -f docker-compose.yml down
docker compose -f docker-compose.yml up -d
|
5.3 访问地址示例
假设 SVR_WEB_HTTP_PORT=8090,服务器 IP 192.168.1.201:
| 用途 | URL |
|---|
| Web 界面 | http://192.168.1.201:8090/ |
| HTTP API | http://192.168.1.201:9380/ |
| MinIO 控制台 | http://192.168.1.201:9001/ |
MinIO 能开、Web 打不开:多半是 ragflow-cpu 未就绪或反复重启,不是防火墙问题。先看:
docker logs docker-ragflow-cpu-1 --tail 80
六、启动与验证
1
2
3
4
5
6
7
8
9
| cd docker
# 建议:代码与镜像同版本
# git checkout v0.26.4
chmod +x entrypoint.sh
docker compose -f docker-compose.yml up -d
docker compose ps
docker logs -f docker-ragflow-cpu-1
|
成功标志(日志):
1
| Running on all addresses (0.0.0.0)
|
本机探活:
1
| curl -I http://127.0.0.1:8090/ # 端口按你的 SVR_WEB_HTTP_PORT
|
期望:HTTP/1.1 200 或 302。若 Connection reset by peer,容器多半在重启,查 entrypoint / migrations 问题(见 §三.3、§九)。
七、可选服务
| 服务 | Profile / 启用方式 | 国内镜像 | 功能 | 对 RAGFlow 的作用 | 最小部署是否需要 |
|---|
| Infinity | DOC_ENGINE=infinity | .../ddn-k8s/docker.io/infiniflow/infinity:v0.7.0 | 向量库 | 替代 ES 做检索与图谱存储 | 否(默认用 ES) |
| OpenSearch | DOC_ENGINE=opensearch | .../ddn-k8s/docker.io/opensearchproject/opensearch:2.19.1 | 检索引擎 | 替代 ES | 否 |
| OceanBase | DOC_ENGINE=oceanbase | .../ddn-k8s/docker.io/oceanbase/oceanbase-ce:4.4.1.0-... | 文档 / 向量引擎 | 替代 ES;宿主机 nofile 要求高 | 否 |
| SeekDB | DOC_ENGINE=seekdb | .../ddn-k8s/docker.io/oceanbase/seekdb:latest | 轻量文档引擎 | 替代 ES | 否 |
| TEI CPU | .env 增加 COMPOSE_PROFILES=...,tei-cpu | .../ddn-k8s/docker.io/infiniflow/text-embeddings-inference:cpu-1.8 | 本地 Embedding | 不依赖云端 Embedding API | 否(可用云端 Embedding) |
| TEI GPU | ...,tei-gpu | .../ddn-k8s/docker.io/infiniflow/text-embeddings-inference:1.8 | GPU Embedding | 同上,更快 | 否 |
| DeepDoc | ...,deepdoc | DEEPDOC_IMAGE(默认需自建或官方) | OCR / 版面 / 表格 | 独立视觉解析;默认主容器内联亦可 | 否 |
| Sandbox | ...,sandbox + SANDBOX_ENABLED=1 | 见 .env 中三条 sandbox 华为镜像 | Agent 代码执行 | 工具沙箱;需 gVisor + Docker sock | 否 |
| NATS | ragflow-go / Go 混合部署 | .../ddn-k8s/docker.io/nats:2.14.2 | 消息队列 | Go 服务通信 | 否(API_PROXY_SCHEME=python) |
| Kibana | ...,kibana | .../ddn-k8s/docker.elastic.co/kibana/kibana:8.11.3 | ES 可视化 | 运维排查 | 否 |
| ragflow-gpu | DEVICE=gpu | 同 RAGFLOW_IMAGE | GPU 加速 DeepDoc | 解析加速 | 否(CPU 可跑) |
启用本地 Embedding 示例:
# docker/.env
COMPOSE_PROFILES=${DOC_ENGINE},${DEVICE},tei-cpu
# 可选小模型降内存:
# TEI_MODEL=BAAI/bge-small-en-v1.5
单独重试拉 TEI:
1
| docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/infiniflow/text-embeddings-inference:cpu-1.8
|
八、国内镜像规律与验证记录
8.1 前缀规律
| 类型 | 正确前缀 | 示例 |
|---|
| RAGFlow 主镜像 | swr.cn-north-4.myhuaweicloud.com/infiniflow/ | .../infiniflow/ragflow:v0.26.4 |
| Docker Hub / Elastic 等 | swr.cn-north-4.myhuaweicloud.com/ddn-k8s/... | .../ddn-k8s/docker.io/mysql:8.0.39 |
| Elastic 官方路径 | .../ddn-k8s/docker.elastic.co/... | .../elasticsearch/elasticsearch:8.11.3 |
8.2 易错点
| 错误写法 | 结果 | 正确写法 |
|---|
swr.cn-north-4.myhuaweicloud.com/infiniflow/infinity:v0.7.0 | 401 Unauthorized | .../ddn-k8s/docker.io/infiniflow/infinity:v0.7.0 |
.../infiniflow/text-embeddings-inference:...(无 ddn-k8s) | 401 | .../ddn-k8s/docker.io/infiniflow/text-embeddings-inference:... |
8.3 拉取验证(实操记录)
| 镜像 | 结果 | 备注 |
|---|
| Valkey / MySQL / ES / Kibana / MinIO(pgsty) / NATS / OpenSearch / OceanBase | 成功 | ddn-k8s 路径可用 |
Infinity(ddn-k8s/.../infinity:v0.7.0) | 成功 | compose 配置可用 |
| TEI cpu-1.8 | 中途 unexpected EOF | 网络中断,不是地址错误;可重试;最小部署不依赖 |
.../infiniflow/infinity(无 ddn-k8s) | 401 | 勿用 |
HuggingFace 慢时,在 .env 取消注释:
HF_ENDPOINT=https://hf-mirror.com
九、常见故障速查
| 现象 | 原因 | 处理 |
|---|
MySQL address already in use | 宿主机 3306 占用 | 只改 EXPOSE_MYSQL_PORT |
MySQL 长期 Waiting / 不 healthy | 首次初始化慢 / 旧数据卷密码不一致 / 内存不足 | 看 docker logs docker-mysql-1;全新可 docker volume rm docker_mysql_data |
exec: "./entrypoint.sh": permission denied | 无执行权限 | chmod +x entrypoint.sh |
run_migrations.sh: No such file + 容器反复重启 | 新代码 entrypoint 挂进旧镜像 | 注释 entrypoint 挂载;去掉 --init-model-provider-tables;或 git checkout v0.26.4 |
| Web 端口冲突(80) | Nginx 等占用 | 改 SVR_WEB_HTTP_PORT |
MinIO 通、Web 不通 / Connection reset | ragflow-cpu 未就绪或在重启 | docker logs docker-ragflow-cpu-1 |
页面 network abnormal | 后端未完全起来就访问 | 等到日志出现 Running on all addresses |
| 能开页不能问答 | 未配 LLM / Embedding | UI「模型」或 service_conf.yaml.template 配置 |
MySQL 健康检查依赖 MYSQL_PASSWORD;Waiting 最长约 20 分钟(120 次 × 10s)。
十、知识图谱:最小安装是否够
| 项目 | 是否足够 |
|---|
| 上述 5 个 Docker 组件 | 足够(图谱存在 ES,不需 Neo4j) |
| 额外 Docker 服务 | 不需要 |
| Chat LLM API | 必须另配 |
| Embedding 模型 | 必须另配(云端 API 或启用 TEI) |
| 文档已解析入库 | 必须(先有 chunk 再建图) |
| 16GB 内存 | 小图谱可试;大图谱建议 32GB+ |
流程:配置 Chat + Embedding → 建库上传并解析 → Configuration 设实体类型 → Files → Generate → Knowledge graph → 对话开启 Use knowledge graph。
十一、离线导出与加载
导出示例目录:E:\docker-images\ragflow-0.26.4
1
2
3
4
5
| docker save -o mysql-8.0.39.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39
docker save -o minio-RELEASE.2026-03-25.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pgsty/minio:RELEASE.2026-03-25T00-00-00Z
docker save -o valkey-8.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8
docker save -o elasticsearch-8.11.3.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:8.11.3
docker save -o ragflow-v0.26.4.tar swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4
|
离线机加载:
1
| for f in *.tar; do docker load -i "$f"; done
|
删除本地镜像:
1
2
| docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39
# ...其余同理
|
十二、推荐启动清单
| 步骤 | 操作 |
|---|
| 1 | git checkout v0.26.4(与镜像对齐) |
| 2 | 备份并修改 .env:国内 RAGFLOW_IMAGE、冲突端口 |
| 3 | 修改 docker-compose-base.yml:基础镜像改华为 ddn-k8s |
| 4 | 修改 docker-compose.yml:去掉 migrations 参数;注释 entrypoint 挂载 |
| 5 | chmod +x entrypoint.sh |
| 6 | docker compose -f docker-compose.yml up -d |
| 7 | 日志确认 Running;浏览器访问 http://IP:SVR_WEB_HTTP_PORT |
| 8 | UI 配置 LLM + Embedding |
十三、相关文件索引
| 文件 | 用途 |
|---|
docker/.env | 端口、密码、镜像、Profile |
docker/docker-compose.yml | RAGFlow 主服务、挂载、command |
docker/docker-compose-base.yml | MySQL / MinIO / Redis / ES 等依赖 |
docker/service_conf.yaml.template | 后端服务配置模板 |
docker/entrypoint.sh | 容器启动脚本(建议用镜像内置) |
docker/init.sql | MySQL 初始化 |
docker/README.md | 官方 Docker 说明 |
十四、小结
| 要点 | 结论 |
|---|
| 最小拓扑 | ES + CPU,5 个镜像即可 |
| 国内源 | 主镜像走华为 infiniflow/;依赖镜像走 ddn-k8s/... |
| 必改文件 | .env、docker-compose-base.yml;建议对齐 docker-compose.yml |
| 版本对齐 | 代码 tag v0.26.4 与镜像一致,避免 entrypoint / migrations 踩坑 |
| 端口冲突 | Web 改 SVR_WEB_HTTP_PORT;MySQL 只改 EXPOSE_MYSQL_PORT |
| 图谱 | 不需额外图数据库;须另配 LLM + Embedding |
镜像标签以 v0.26.4 为准;实践基于华为云 SWR / ddn-k8s 国内源。