使用 Docker 构建本地 RAGFlow 知识库全流程记录
一、准备工作
Docker Desktop(Windows)
参考这篇博客更改默认下载地址,否则会下载到c盘Windows装Docker至D盘/其他盘(最新,最准确,直接装)_docker安装到d盘-CSDN博客
下载完了可能会报错,如果你的系统是windows家庭版,需要下载虚拟机管理程序Hyper-V具体参考这篇超详细Windows11家庭中文版系统安装Docker-20230401_windows11安装docker-CSDN博客
安装完成之后可能打开docker还会报错,这时候右键管理员打开docker试试
RagFlow 项目代码(通过 GitHub 获取)RagFlow
Ollama(本地大模型推理框架)Ollama
下载安装包之后,可以通过命令行下载,指定的地址,否则会下载到c盘,DIR后面是你的下载地址,命令在OllamaSetup.exe所在目录下
OllamaSetup.exe /DIR="D:\ollama"
配置环境变量,第一条无脑抄,第二条地址是指定你模型下载的地址

完成后,在命令行输入ollama,结果如图,说明ollama下载安装成功

常用命令:ollama list,查看ollama下载的模型,ollama rm llama3:latest,删除模型,ollama pull gemma:2b,下载模型,rm、pull后面跟模型名称
ollama list
ollama rm deepseek-r1:1.5b
ollama pull deepseek-r1:1.5b
推荐:使用 VS Code 管理配置文件
二、部署步骤详解
下载好ragflow文件后,更改.env文件,D:\overleaf\ragflow\ragflow-main1\docker下的.env文件,如图更改

右键管理员打开docker desktop
在D:\overleaf\ragflow\ragflow-main1\docker下打开命令行,输入命令docker-compose -f docker-compose.yml up -d,第一次运行会花费一些时间,保持网络通畅耐心等待,本次实验没有设置国内镜像源,需要开代理。没有代理的小伙伴可以去找一些国内的镜像源地址,这里就不展开了。
docker-compose -f docker-compose.yml up -d
顺利的话,启动成功之后,浏览器就可以访问localhost:80,注册登录ragflow账号了。
坎坷路程上的错误
1.每次开机后打开docker就会报错:getting main distro bootstrap version: open \\wsl$\docker-desktop\etc\wsl_bootstrap_version: The network name cannot be found. checking if isocache exists: CreateFile \\wsl$\docker-desktop-data\isocache\: The network name cannot be found.
解决办法:在命令行(管理员身份)输入:wsl --unregister docker-desktop,重新打开docker即可(用管理员身份打开)
2.浏览器访问localhost:80,显示是iis
有与端口冲突相关,如果80端口被占用
80 端口被占用说明有其他程序正在监听它,通常是:系统服务(如 IIS、Apache、Nginx)、其他 Docker 容器或者你本地运行的 Web 程序(例如 WSL 中的服务)
再打开一个命令窗口,netstat -aon | findstr :80这个命令查看是否80端口被其他进程占用,如果有其他进程,且不是重要的进程,可以用任务管理器,搜索进程id(pid)结束进程。
或者运行docker ps --format "table {{.Names}}\t{{.Ports}}",查看是哪个容器占用的80端口,如果结果有nginx,在docker/docker-compose.yml 中的 Nginx 映射端口从 80 改为其他未被占用的端口,例如 8080,之后浏览器访问变为localhost:8080
services:
nginx:
ports:
- "8080:80" # 主机8080 -> 容器80
3,docker-compose up -d命令运行成功了,但是docker logs -f ragflow-server日志里报错AuthenticationException(401, 'security_exception', 'unable to authenticate user [elastic] for REST request [/]'). Waiting Elasticsearch http://es01:9200 to be healthy.
es01服务出现了错误,通过docker ps,确认是否有名为 es01 的容器正在运行,结果里面看es01那一行如果有Up说明运行成功,当时没有截图,但复制了结果,所以只能贴出运行结果文字版了
D:\overleaf\ragflow\ragflow-main1\docker>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b5866aa54bb elasticsearch:8.11.3 "/bin/tini -- /usr/l…" 7 minutes ago Up 6 minutes (healthy) 9300/tcp, 0.0.0.0:1200->9200/tcp ragflow-es-01
b4f00b3acdae quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z "/usr/bin/docker-ent…" 7 minutes ago Up 6 minutes 0.0.0.0:9000-9001->9000-9001/tcp ragflow-minio
32f9c4199056 mysql:8.0.39 "docker-entrypoint.s…" 7 minutes ago Up 6 minutes (healthy) 33060/tcp, 0.0.0.0:5455->3306/tcp ragflow-mysql
2388a52a16ba valkey/valkey:8 "docker-entrypoint.s…" 7 minutes ago Up 6 minutes 0.0.0.0:6379->6379/tcp
接着运行curl -u elastic:你的密码 http://localhost:9200手动验证 Elasticsearch 登录,可能这里就会失败了,可能是密码的问题,虽然所有配置文件里密码统一设置的是'infini_rag_flow',可能是配置文件关于es的配置出了问题。我这两个都有问题。
上面docker ps结果里面我的es容器名字为”ragflow-es-01“,我的ragflow/conf/service_conf.yaml文件里关于es的是hosts: "http://localhost:1200",端口号和名字都错了,所以把host改为 hosts: "http://ragflow-es-01:9200",
关于密码:进入 ragflow-es-01 容器,重置密码为你想设置的或者系统随机生成设置为密码
docker exec -it ragflow-es-01 bash
bin/elasticsearch-reset-password -u elastic
D:\overleaf\ragflow\ragflow-main1\docker>docker exec -it ragflow-es-01 bash
elasticsearch@2acdff77d2cc:~$ bin/elasticsearch-reset-password -u elastic
WARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch]
WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch]
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: QGhsILsaj1xBSIpxAES_
系统返回给我新的密码:QGhsILsaj1xBSIpxAES_,将密码复制,放到三个配置文件里:.env,docker-compose.yml,service_conf.yaml
docker-compose.yml文件里没有es,就去docker-compose-base.yml里面,密码如图不用修改,只修改.env和service_conf.yaml

#原来代码
es:
hosts: 'http://localhost:1200'
username: 'elastic'
password: 'infini_rag_flow'
#修改后
es:
hosts: 'http://ragflow-es-01:9200'
username: 'elastic'
password: 'QGhsILsaj1xBSIpxAES_'
docker-compose.yml文件里关于es端口如下所示,这里的${ES_PORT}代表.env文件里es的端口
ports:
- ${ES_PORT}:9200
.env文件关于es端口:
ES_PORT=1200
所以此时使用1200端口测试可以成功
curl -u elastic:QGhsILsaj1xBSIpxAES_ http://localhost:1200
结果如下:
D:\overleaf\ragflow\ragflow-main1\docker>curl -u elastic\:QGhsILsaj1xBSIpxAES\_ [http://localhost:1200](http://localhost:1200)
{
"name" : "es01",
"cluster\_name" : "docker-cluster",
"cluster\_uuid" : "5RyVmu0wRuSA0AEdd6udOg",
"version" : {
"number" : "8.11.3",
"build\_flavor" : "default",
"build\_type" : "docker",
"build\_hash" : "64cf052f3b56b1fd4449f5454cb88aca7e739d9a",
"build\_date" : "2023-12-08T11:33:53.634979452Z",
"build\_snapshot" : false,
"lucene\_version" : "9.8.0",
"minimum\_wire\_compatibility\_version" : "7.17.0",
"minimum\_index\_compatibility\_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
docker常用命令
docker logs -f ragflow-server
启动服务(ragflow/docker下)
docker-compose -f docker-compose.yml up -d
docker-compose up -d
关闭服务
docker-compose down # 停止并移除容器
确定服务器状态
docker logs -f ragflow-server
docker-compose up -d # 后台启动所有服务
docker-compose logs -f 服务名 # 实时查看日志
docker-compose ps # 查看服务状态
查看服务
docker ps #查看运行的服务
docker ps -a #查看所有服务
容器相关
docker start 容器ID # 启动容器
docker stop 容器ID # 停止容器
docker restart 容器ID # 重启容器
docker rm 容器ID # 删除容器
三知识库构建
经过解决一系列问题之后,终于能够访问localhost:8880(我更改了端口号)注册账号
在构建知识库之前,需要启动ollama下载的模型,用命令:ollama run 你模型名字。
然后增加本地部署的模型,创建知识库,上传文件,解析文件,新建助理问答,一定不要忘记解析文件。
这个过程中也不出意外地出现了意外。
一切准备就绪后,向小助理提问知识库的内容,结果一直显示搜索中,等很久也没有生成结果。
这个时候,运行下面命令,检查服务是否正常,可能显示都正常
docker ps试试可能看不出异常
然后刷新ragflow页面,小助理报错:ERROR: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f220c275de0>: Failed to establish a new connection: [Errno 111] Connection refused))
说明 RagFlow 试图连接某个服务(如 Ollama 模型、Embedding 模型、Elasticsearch 等)时,被拒绝连接。这是非常典型的“服务未启动或端口填错”的错误。
执行下面命令,看服务是否正常
# 模型服务
curl http://localhost:11434
# Elasticsearch 服务(这个端口是.env文件里设置的关于es的端口,可能有的人是9200)
curl http://localhost:1200
可能没有发现异常,或者有异常,用docker logs ragflow-es-01命令查看日志,发现了问题所在,
ERROR: Elasticsearch exited unexpectedly, with exit code 137,137代表内存问题,es运行的内存不够,可以通过任务管理器--性能查看内存还有多少。
D:\overleaf\ragflow\ragflow-main1\docker>docker logs ragflow-es-01
Created elasticsearch keystore in /usr/share/elasticsearch/config/elasticsearch.keystore
May 03, 2025 10:34:37 AM sun.util.locale.provider.LocaleProviderAdapter
WARNING: COMPAT locale provider will be removed in a future release
{"@timestamp":"2025-05-03T02:34:38.382Z", "log.level": "INFO", "message":"Java vector incubator API enabled; uses preferredBitSize=512", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.apache.lucene.internal.vectorization.PanamaVectorizationProvider","elasticsearch.node.name":"es01","elasticsearch.cluster.name":"docker-cluster"}
ERROR: Elasticsearch exited unexpectedly, with exit code 137
我的内存是13.8/15.7gb,然后去.env文件里去看MEM_LIMIT=8073741824,这个数值约为7.5gb,说明确实是内存不够了。
解决办法:把没用的应用都关掉,这个操作对于我的内存问题简直是杯水车薪,修改.env文件里的分配给es的内存: mem_limit: 1g
docker-compose.yml文件里的设置为:
environment:
- ES_JAVA_OPTS=-Xms512m -Xmx512m # 从 1g 改为 512MB 堆内存
可以正常搜索了。我的知识库上传了我的个人简历,通过多个问答,可以看出模型成功解析了我的文件,并且成功检索出了问题的正确答案。


为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐



所有评论(0)