适用环境:WSL2 (Ubuntu 22.04) + NVIDIA RTX 3080 20GB + Docker;部署日期:2026-08-08;RAGFlow 版本:v0.26.4。
1. 环境要求

2. 前置条件安装
2.1 Docker 权限配置
确保当前用户属于 docker 组,否则无法执行 Docker 命令:
sudo usermod -aG docker $USER
newgrp docker
验证
docker ps
2.2 安装 NVIDIA Container Toolkit
Ollama 容器需要 GPU 直通,必须安装 NVIDIA Container Toolkit:
添加 NVIDIA 仓库 GPG Key
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
添加 APT 源
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
安装
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
配置 Docker runtime
sudo nvidia-ctk runtime configure --runtime=docker
重启 Docker
sudo systemctl restart docker
验证:应看到 nvidia runtime
docker info | grep -i runtime
预期输出: Runtimes: io.containerd.runc.v2 nvidia runc

3. 获取 RAGFlow 源码
git clone https://github.com/infiniflow/ragflow.git ~/ragflow
国内镜像(如无法访问 GitHub):
git clone https://gitee.com/mirrors/ragflow.git ~/ragflow
4. 配置修改
所有配置文件位于 ~/ragflow/docker/ 目录下。
4.1 修改 .env — 端口与基础配置
cd ~/ragflow/docker
编辑 .env 文件,修改以下关键项:
# ===== 端口配置(避免与已有服务冲突) =====
# Web 访问端口(原值 80,改为 980 避免与 Dify 的 Nginx 冲突)
SVR_WEB_HTTP_PORT=980
SVR_WEB_HTTPS_PORT=9443
# MySQL 对外暴露端口(原值 3306,改为 13306 避免冲突)
EXPOSE_MYSQL_PORT=13306
# 以下端口保持默认
SVR_HTTP_PORT=9380
ADMIN_SVR_HTTP_PORT=9381
SVR_MCP_PORT=9382
GO_HTTP_PORT=9384
GO_ADMIN_PORT=9383
# ===== 向量数据库类型 =====
DOC_ENGINE=elasticsearch
# ===== 设备类型 =====
DEVICE=cpu
# ===== Compose Profile =====
COMPOSE_PROFILES=${DOC_ENGINE},${DEVICE}
# ===== 时区 =====
TZ=Asia/Shanghai
# ===== RAGFlow 镜像 =====
RAGFLOW_IMAGE=infiniflow/ragflow:v0.26.4
# 国内镜像备选:
# RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.4
# RAGFLOW_IMAGE=registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:v0.26.4
# ===== 默认密码(生产环境务必修改) =====
ELASTIC_PASSWORD=infini_rag_flow
MYSQL_PASSWORD=infini_rag_flow
MINIO_PASSWORD=infini_rag_flow
REDIS_PASSWORD=infini_rag_flow
4.2 修改 docker-compose.yml — 移除不存在的迁移脚本
编辑 ~/ragflow/docker/docker-compose.yml,找到 ragflow-cpu 服务的 command 部分:
修改前:
command:
- --enable-adminserver
- --init-model-provider-tables
修改后:
command:
- --enable-adminserver
注:--init-model-provider-tables 会调用 tools/scripts/run_migrations.sh,该文件在 Docker 镜像中不存在,会导致容器反复重启。
4.3 修改 docker-compose-base.yml — 修复 Docker Compose v5 验证错误
编辑 ~/ragflow/docker/docker-compose-base.yml,找到 sandbox-executor-manager 服务:
删除以下行:
security_opt:
- no-new-privileges:true
注:Docker Compose v5 对 security_opt 重复项验证过严,即使只有一项也会报错 “items at 0 and 1 are equal”。由于 sandbox profile 未启用,直接移除即可。
4.4 新建 docker-compose.override.yml — 添加 Ollama 服务
在 ~/ragflow/docker/ 目录下创建 docker-compose.override.yml:
services:
ollama:
image: ollama/ollama:latest
container_name: ragflow-ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
networks:
- ragflow
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama_data:
driver: local
注:Ollama 加入 RAGFlow 的 ragflow 网络,使 RAGFlow 容器可通过容器名 ragflow-ollama 访问 Ollama API。
5. 启动服务
5.1 启动所有容器
cd ~/ragflow/docker
docker compose \{
}-p ragflow \{
}-f docker-compose-base.yml \{
}-f docker-compose.yml \{
}-f docker-compose.override.yml \{
}--profile elasticsearch \{
}--profile cpu \{
}up -d
重要:必须使用 -p ragflow 指定项目名,避免与 Dify 等其他 Compose 项目(默认项目名同为 docker)产生容器名冲突。
5.2 验证服务状态
docker ps --filter name=ragflow --format "table {{.Names}} {{.Status}} {{.Ports}}"

5.3 验证 Web 可访问
curl -s -o /dev/null -w "%{http_code}" http://localhost:980

6. 拉取 Ollama 模型
6.1 模型选择参考

注:最后笔者选了qwen3:14b
6.2 拉取模型
# 对话模型(按需选择一个)
docker exec ragflow-ollama ollama pull qwen3:14b
# Embedding 模型
docker exec ragflow-ollama ollama pull bge-m3
6.3 验证模型
docker exec ragflow-ollama ollama list

6.4 测试模型推理
测试对话模型
docker exec ragflow-ollama ollama run qwen3:14b "你好,请用一句话介绍自己"

测试 Embedding 模型
curl http://localhost:11434/api/embeddings \{
}-d '{"model": "bge-m3", "prompt": "测试文本"}'

7. RAGFlow 中配置 Ollama 模型
7.1 登录 RAGFlow
浏览器访问 http://localhost:980,注册账号并登录。
7.2 添加 Ollama 模型提供商
1. 进入 系统设置 → 模型提供商 → Ollama
2. 点击 添加模型,填写以下信息:
Chat 模型(对话)
模型名称 : qwen3:14b
模型类型 : Chat
Base URL : http://ragflow-ollama:11434
Embedding 模型(向量化)
模型名称 : bge-m3
模型类型 : Embedding
Base URL : http://ragflow-ollama:11434
注:Base URL 必须使用 Docker 内部网络容器名 ragflow-ollama,而非 localhost 或 127.0.0.1,因为 RAGFlow 和 Ollama 运行在同一 Docker 网络中。
7.3 设置默认模型
进入 系统设置 → 系统模型设置,将以下模型设为默认:
Chat 模型: qwen3:14b
Embedding 模型: bge-m3
8. 服务管理命令
8.1 启动/停止/重启
# 定义快捷变量(建议加入 ~/.bashrc)
export RAGFLOW_COMPOSE="docker compose -p ragflow -f docker-compose-base.yml -f docker-compose.yml -f docker-compose.override.yml --profile elasticsearch --profile cpu"
cd ~/ragflow/docker
# 启动
$RAGFLOW_COMPOSE up -d
# 停止
$RAGFLOW_COMPOSE down
# 重启单个服务
$RAGFLOW_COMPOSE restart ragflow-cpu
# 查看日志
$RAGFLOW_COMPOSE logs -f ragflow-cpu
$RAGFLOW_COMPOSE logs -f ollama
8.2 Ollama 模型管理
# 列出已安装模型
docker exec ragflow-ollama ollama list
# 拉取新模型
docker exec ragflow-ollama ollama pull <model_name>
# 删除模型
docker exec ragflow-ollama ollama rm <model_name>
# 查看模型详情
docker exec ragflow-ollama ollama show qwen3:14b
8.3 数据备份
# MySQL 备份
docker exec ragflow-mysql-1 mysqldump -uroot -pinfini_rag_flow rag_flow > ragflow_backup.sql
# MinIO 数据备份(知识库文件)
docker cp ragflow-minio-1:/data /tmp/minio_backup
9. 服务端口汇总

10. 常见问题排查
Q1: 容器启动后反复重启
# 查看容器日志
docker logs ragflow-ragflow-cpu-1 --tail 50
# 常见原因:
# - --init-model-provider-tables 标志导致迁移脚本找不到 → 参见 4.2 节移除
# - MySQL 未就绪 → 等待 MySQL healthy 后重启
docker restart ragflow-ragflow-cpu-1
Q2: Ollama 容器启动失败 “could not select device driver nvidia”
原因:NVIDIA Container Toolkit 未安装或未配置
解决:参见 2.2 节安装 NVIDIA Container Toolkit
# 验证
docker info | grep nvidia
Q3: Docker Compose 报错 “security_opt items at 0 and 1 are equal”
原因:Docker Compose v5 验证过严
解决:参见 4.3 节移除 sandbox-executor-manager 的 security_opt
Q4: 与已有服务(如 Dify)容器名冲突
原因:多个 Compose 项目使用相同默认项目名 docker
解决:启动时必须指定 -p ragflow
若已冲突,先停止再重新启动:
cd ~/ragflow/docker
docker compose -f docker-compose-base.yml -f docker-compose.yml down
docker compose -p ragflow -f docker-compose-base.yml -f docker-compose.yml \{
}-f docker-compose.override.yml --profile elasticsearch --profile cpu up -d
Q5: RAGFlow 中添加 Ollama 模型连接失败
# 检查 Ollama 是否在 RAGFlow 同一网络
docker network inspect ragflow_ragflow
# 确认 Base URL 使用容器名而非 localhost
# 正确: http://ragflow-ollama:11434
# 错误: http://localhost:11434
Q6: 显存不足导致模型加载失败
# 查看当前显存使用
nvidia-smi
# 若显存不足,换用更小的模型
docker exec ragflow-ollama ollama pull qwen2.5:7b
# 或设置 Ollama 自动卸载(默认5分钟空闲后卸载)
# 环境变量 OLLAMA_KEEP_ALIVE=5m
11. 文件结构参考
~/ragflow/docker/
├── .env # 环境变量配置(已修改端口)
├── docker-compose.yml # 主 Compose 文件(已修改 command)
├── docker-compose-base.yml # 基础服务(已移除 security_opt)
├── docker-compose.override.yml # 自定义覆盖(新增 Ollama 服务)
├── service_conf.yaml.template # 服务配置模板
├── entrypoint.sh # 入口脚本
├── init.sql # MySQL 初始化
├── ragflow-logs/ # RAGFlow 日志目录
└── nginx/ # Nginx 配置
12. 快速部署脚本(一键执行版)
将以下内容保存为 deploy_ragflow.sh,赋予执行权限后运行:
#!/bin/bash
set -e
echo "===== RAGFlow + Ollama 一键部署脚本 ====="
# 1. 安装 NVIDIA Container Toolkit
echo "[1/6] 安装 NVIDIA Container Toolkit..."
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \{
}sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \{
}sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \{
}sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
sudo apt-get update -qq
sudo apt-get install -y -qq nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
echo " ✓ NVIDIA Container Toolkit 安装完成"
# 2. 克隆仓库
echo "[2/6] 克隆 RAGFlow 仓库..."
if [ ! -d ~/ragflow ]; then
git clone https://github.com/infiniflow/ragflow.git ~/ragflow
fi
echo " ✓ 仓库已就绪"
# 3. 修改配置
echo "[3/6] 修改配置文件..."
cd ~/ragflow/docker
# 修改端口
sed -i 's/^SVR_WEB_HTTP_PORT=80$/SVR_WEB_HTTP_PORT=980/' .env
sed -i 's/^SVR_WEB_HTTPS_PORT=443$/SVR_WEB_HTTPS_PORT=9443/' .env
sed -i 's/^EXPOSE_MYSQL_PORT=3306$/EXPOSE_MYSQL_PORT=13306/' .env
# 移除 --init-model-provider-tables
sed -i '/--init-model-provider-tables/d' docker-compose.yml
# 移除 security_opt
sed -i '/security_opt/,/no-new-privileges/d' docker-compose-base.yml
# 创建 override 文件
cat > docker-compose.override.yml << 'OVERRIDE_EOF'
services:
ollama:
image: ollama/ollama:latest
container_name: ragflow-ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
networks:
- ragflow
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama_data:
driver: local
OVERRIDE_EOF
echo " ✓ 配置修改完成"
# 4. 启动服务
echo "[4/6] 启动服务..."
docker compose -p ragflow \{
}-f docker-compose-base.yml \{
}-f docker-compose.yml \{
}-f docker-compose.override.yml \{
}--profile elasticsearch \{
}--profile cpu \{
}up -d
echo " ✓ 服务已启动"
# 5. 拉取模型
echo "[5/6] 拉取模型(后台进行)..."
docker exec ragflow-ollama ollama pull bge-m3 &
docker exec ragflow-ollama ollama pull qwen3:14b &
wait
echo " ✓ 模型拉取完成"
# 6. 验证
echo "[6/6] 验证服务..."
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:980 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
echo " ✓ RAGFlow Web 可访问: http://localhost:980"
else
echo " ⚠ RAGFlow Web 暂未就绪(HTTP $HTTP_CODE),请稍等片刻后重试"
fi
echo ""
echo "===== 部署完成 ====="
echo "RAGFlow Web: http://localhost:980"
echo "Ollama API: http://localhost:11434"
echo "MinIO 控制台: http://localhost:9001"
echo ""
echo "模型配置(RAGFlow → 设置 → 模型提供商 → Ollama):"
echo " Chat: qwen2.5:14b → http://ragflow-ollama:11434"
echo " Embedding: bge-m3 → http://ragflow-ollama:11434"
脚本赋权并运行:
chmod +x deploy_ragflow.sh
./deploy_ragflow.sh