一、准备工作

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 堆内存

可以正常搜索了。我的知识库上传了我的个人简历,通过多个问答,可以看出模型成功解析了我的文件,并且成功检索出了问题的正确答案。

Logo

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

更多推荐