Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型

我习惯在CMD中运行命令,我看一些教程使用Docker安装Anythingllm时在Power Shell中。

该教程在 Windows CMD 中运行这个 docker 命令,以下是从头到尾的步骤,包括如何在 CMD 中正确设置和运行该命令。

电脑配置:Win11+wsl2+4070tis+内存48G

大模型:ollama-deepseek-r1:14b

所用软件:ollama+docker+anythingllm

4070tis使用anythingllm,在deepseek-r1:14b下的生成tocken速度大概是:52toc/s

请添加图片描述

备注:ollama需要自己首先安装,去官网下载,然后拉取对应大模型即可。

1. 安装 Docker Desktop

确保你已经安装并启动了 Docker Desktop。如果还没有安装,可以从 Docker 官网 下载并安装。

Docker官方网址:https://www.docker.com/products/docker-desktop/

记得开启电脑wsl2,如果没有安装过wsl,可以看如下:

微软官方教程:https://learn.microsoft.com/en-us/windows/wsl/setup/environment

2. 使用Docker拉取Anythingllm镜像

拉取镜像命令如下:

docker pull mintplexlabs/anythingllm

之后查看是否有该镜像,使用命令:

docker images

请添加图片描述

可以看到电脑中存在Anythingllm这个镜像了

2. 设置 STORAGE_LOCATION 路径

在 CMD 中,你可以使用 set 命令来设置环境变量。假设你希望将 STORAGE_LOCATION 设置为 Windows 的文档目录,可以按以下步骤操作,逐行运行如下命令,如下图,这三行可以从如下面代码行中复制。
请添加图片描述

  1. 打开 CMD(管理员模式)。

  2. 设置存储目录(你可以自定义这个路径,下面是一个示例):
    第一行代码

    set STORAGE_LOCATION=%USERPROFILE%\Documents\anythingllm
    

3. 创建存储目录和 .env 文件

确保存储目录存在,并且 .env 文件已经创建。使用以下命令来确保这些文件存在:

  1. 创建存储目录(如果目录不存在):
    第二行代码

    if not exist "%STORAGE_LOCATION%" mkdir "%STORAGE_LOCATION%"
    
  2. 创建 .env 文件(如果文件不存在):
    第三行代码

    if not exist "%STORAGE_LOCATION%\.env" echo. > "%STORAGE_LOCATION%\.env"
    

此时会在电脑文档的文件夹下,存在一个anythingllm文件夹,如下所示:

请添加图片描述

该文件夹下存在一个.env文件,存放一些配置。


.env 文件的作用

.env 文件是用于存储容器配置的环境文件,通常包含敏感信息和应用的配置参数。例如,配置大语言模型(LLM)、API 密钥、数据库连接等。容器运行时,它会读取 .env 文件并使用其中的配置信息。

关键配置项

.env 文件中,常见的配置项包括:

  • SERVER_PORT:指定服务器运行的端口。
  • JWT_SECRET:用于生成和验证 JWT(JSON Web Token)的密钥。
  • STORAGE_DIR:指定存储数据的路径。
  • LLM_PROVIDER:配置大语言模型提供者。
  • OLLAMA_BASE_PATH:配置 Ollama 服务的基础 URL 地址。
  • OPEN_AI_KEY:用于访问 OpenAI API 的密钥。

.env 文件中配置的内容会根据你的需求和使用的服务不同而有所变化。


4. 运行 Docker 命令

在 CMD 中,你可以使用单行命令运行 Docker。这里是调整后的命令,适合在 Windows CMD 中运行:

docker run -d --name anythingllm --add-host=host.docker.internal:host-gateway --env STORAGE_DIR=/app/server/storage --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1" --health-interval 60s --health-start-period 60s --health-timeout 10s -p 3001:3001/tcp --restart=always --user anythingllm -v %STORAGE_LOCATION%:/app/server/storage -v %STORAGE_LOCATION%\.env:/app/server/.env -w /app mintplexlabs/anythingllm

运行之后如下图,会启动一个容器,用一大串字母表示,该字母是Docker 为该容器分配一个唯一的 ID,这个 ID 主要用于在 Docker 系统中管理容器。你可以用这个 ID 来执行不同的 Docker 命令,比如停止容器、查看容器日志、查看容器状态等。

请添加图片描述

查看当前所有的容器,命令如下:

docker ps

请添加图片描述

可以看到我们已经成功启动一个容器

docker run 命令详细解析

给出的命令用于启动 AnythingLLM Docker 容器,以下是对该命令中每个字段的详细解释:

各部分的含义

  1. docker run -d
    docker run 命令用于启动一个新的容器,-d 表示容器将以“分离模式”(后台运行)启动。这样,命令执行完后,你可以继续在终端中操作。
  2. --name anythingllm
    给容器指定一个名字 anythingllm。这个名字用来唯一标识容器,可以方便地进行容器管理(例如,停止、重启、删除容器等)。
  3. --add-host=host.docker.internal:host-gateway
    添加一个额外的主机名解析。在 Docker 容器内,通过 host.docker.internal 可以访问宿主机的网络接口,这对于需要连接到宿主机的服务(比如本地运行的 ollama 服务)非常有用。host-gateway 是指容器访问宿主机的网关地址。
  4. --env STORAGE_DIR=/app/server/storage
    设置容器内部的环境变量。STORAGE_DIR=/app/server/storage 会将容器内部的存储目录设置为 /app/server/storage。该目录用于存储 AnythingLLM 的数据,如模型、日志等。
  5. --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1"
    设置容器的健康检查命令。docker-healthcheck.sh 是一个用于检查容器健康状态的脚本。它会定期运行,确保容器的正常工作。如果健康检查失败(即返回非零退出状态),则 Docker 会认为容器不可用。
  6. --health-interval 60s
    设置健康检查命令的执行间隔为 60 秒。即每 60 秒 Docker 会运行一次健康检查命令。
  7. --health-start-period 60s
    设置容器启动后的健康检查延迟时间。即容器启动后,Docker 会等待 60 秒再开始执行健康检查。
  8. --health-timeout 10s
    设置健康检查命令的超时时间为 10 秒。如果健康检查命令在 10 秒内没有返回结果,则认为健康检查失败。
  9. -p 3001:3001/tcp
    映射容器内部的端口 3001 到宿主机的端口 30013001AnythingLLM Web 界面的默认端口。在启动容器后,你可以通过访问 http://localhost:3001 来访问 AnythingLLM
  10. --restart=always
    设置容器的重启策略。always 表示当容器停止运行时,Docker 会自动重启该容器,确保容器始终在后台运行。
  11. --user anythingllm
    以指定的用户 anythingllm 来运行容器内的程序。此选项确保容器内的进程以指定的用户身份执行,而不是使用默认的 root 用户。
  12. -v %STORAGE_LOCATION%:/app/server/storage
    将宿主机的目录 %STORAGE_LOCATION% 挂载到容器内部的 /app/server/storage 目录。%STORAGE_LOCATION% 是之前在 CMD 中设置的环境变量,指向容器存储数据的路径。这样,容器内的数据会存储到宿主机的指定路径上,容器重启后数据仍然保留。
  13. -v %STORAGE_LOCATION%\.env:/app/server/.env
    将宿主机的 .env 文件(位于 %STORAGE_LOCATION% 路径下)挂载到容器内的 /app/server/.env 文件。.env 文件通常用于存储配置参数,如 API 密钥、数据库配置等。这样,容器启动时可以加载这些配置。
  14. -w /app
    设置容器内的工作目录为 /app。这意味着容器内的程序将以这个目录作为默认工作目录。
  15. mintplexlabs/anythingllm
    指定要运行的 Docker 镜像,这里是 mintplexlabs/anythingllm,它包含了 AnythingLLM 的所有必要文件和配置。

这条 Docker 命令启动了一个 AnythingLLM 容器,并通过挂载宿主机的存储目录和 .env 文件,使得容器能够持续存储数据并加载配置。容器以后台运行,并提供 Web 服务,可以通过 http://localhost:3001 访问应用。

5. 访问应用

成功运行该命令后,你可以通过浏览器访问 http://localhost:3001 来进行初始配置。

http://localhost:3001

请添加图片描述

选择ollama,然后选择对应的大模型

请添加图片描述

选择team,可以设置多用户登录

请添加图片描述

6. 配置环境

访问 http://localhost:3001 后,进行相关配置,如配置大语言模型(LLM)、向量数据库等。根据需要更新 .env 文件中的配置参数,如 SERVER_PORTOPEN_AI_KEY 等。

聊天设置

新建一个空间区,然后聊天设置改为对应的模型,到最下面,进行确认

请添加图片描述

向量数据库

如果默认的效果不好,向量数据库可以选择 精度优化

请添加图片描述

嵌入首选项

默认的也可以,如果默认的解析知识库有问题,也可以使用ollama提供的nomic-embed-text

请添加图片描述

添加知识库

点击工作区的上传按钮:

请添加图片描述

打开如下界面,然后上传对应的文档

请添加图片描述

移动到工作区,然后进行保存和嵌入

请添加图片描述

成员管理

设置里面,找到管理员-用户,然后在右上角添加用户

请添加图片描述
可以为用户选择不同的角色。不同角色持有的权限是不同的请添加图片描述

局域网内其他用户访问

首先查看部署本机的IPv4地址,例如1.1.1.1
局域网内其他用户浏览器访问:1.1.1.1:3001即可
如下图所示
在这里插入图片描述

这应该是几个常用的内容,其他东西,请自行研究

7. 总结

在 Windows CMD 中运行 Docker 命令的步骤如下:

  1. 设置环境变量 STORAGE_LOCATION,并确保该路径存在。
  2. 创建必要的存储目录和 .env 文件。
  3. 使用单行命令在 CMD 中运行 Docker 容器。
  4. 通过浏览器访问 http://localhost:3001 进行初始化配置。
<think>好的,我现在需要帮助用户解决在Windows Docker安装AnythingLLM时遇到的跨子网局域网访问问题。用户提到不同子网下的局域网无法访问,我需要先理解这个问题的背景和可能的原因。 首先,DockerWindows上的网络配置可能与Linux不同,通常使用Docker Desktop,它默认会创建一个虚拟网络。用户遇到的问题可能是容器所在的Docker网络与宿主机的局域网不在同一子网,导致其他子网的设备无法访问容器暴露的端口。 接下来,我需要回顾Docker的网络配置相关知识。Docker有几种网络模式,比如bridge、host等。默认情况下,容器使用bridge网络,这可能会限制跨子网的访问。用户可能需要调整Docker的网络设置,比如修改默认的bridge网络子网,或者创建自定义网络,确保容器IP与宿主机所在的局域网子网兼容。 根据用户提供的引用资料,引用[2]提到修改docker0的网段,但在Windows中可能不直接适用,因为Docker Desktop使用不同的网络后端。可能需要通过Docker Desktop的配置来调整网络设置。引用[4]提到使用Docker Compose部署并实现跨项目网络访问,这可能涉及到创建自定义网络并确保服务加入同一网络。 另外,引用[3]中的例子展示了如何将宿主机的目录挂载到容器,但用户的问题更多是关于网络配置,可能需要配置端口映射和防火墙规则,确保宿主机的防火墙允许外部访问Docker容器的端口。 可能的解决方案步骤包括: 1. 检查Docker容器的网络配置,确保端口正确映射到宿主机。 2. 修改Docker的默认网络设置,使其与局域网子网一致,可能需要创建自定义网络。 3. 配置Windows防火墙,允许外部访问映射的端口。 4. 使用Docker Compose来管理网络配置,确保服务在同一个自定义网络中,便于跨子网访问。 还需要考虑Windows特定的网络问题,比如Hyper-V虚拟交换机的配置,可能需要设置外部交换机以便容器能够桥接到物理网络。此外,如果宿主机有多个网络接口,需要确保Docker绑定到正确的接口。 最后,验证步骤也很重要,比如从同一局域网的其他设备ping宿主机IP,测试端口连通性,检查容器日志确认服务是否正常监听。可能需要用户提供更多具体信息,如Docker版本、网络拓扑、使用的子网段等,以进一步诊断问题。</think>### 解决方案:Windows Docker跨子网访问AnythingLLM配置步骤 以下是针对Windows Docker中跨子网访问AnythingLLM的配置方案,分步骤说明: --- #### **1. 确保容器端口正确映射** 在运行AnythingLLM容器时,需明确将容器内部端口映射到宿主机的**所有IP地址**(0.0.0.0),而非默认的本地回环地址(127.0.0.1)。 **命令示例**: ```bash docker run -d -p 0.0.0.0:3000:3000 --name anythingllm anythingllm/image ``` 或通过`docker-compose.yml`配置: ```yaml services: anythingllm: ports: - "0.0.0.0:3000:3000" ``` 此配置允许宿主机所有网络接口(包括局域网IP)监听3000端口[^3]。 --- #### **2. 调整Docker默认网络子网** 若宿主机所在局域网子网与Docker默认网段冲突(如172.16.0.0/12),需修改Docker的网络配置: 1. **打开Docker Desktop设置** → **Docker Engine** 2. 添加以下配置,指定自定义网段(需与宿主机局域网子网兼容): ```json { "bip": "192.168.200.1/24", "default-address-pools": [ {"base": "192.168.201.0/24", "size": 24} ] } ``` 3. 重启Docker生效[^2]。 --- #### **3. 创建自定义Docker网络** 通过自定义网络实现跨子网通信: ```bash docker network create --subnet=192.168.100.0/24 anythingllm-net ``` 运行容器时指定该网络: ```bash docker run -d --network=anythingllm-net --name anythingllm anythingllm/image ``` 其他服务或容器加入同一网络即可直接通过容器名称通信[^4]。 --- #### **4. 配置Windows防火墙规则** 允许外部设备访问宿主机的映射端口(如3000): 1. 打开**控制面板** → **Windows Defender 防火墙** → **高级设置** 2. 新建入站规则,选择**端口** → **TCP 3000** → **允许连接** 3. 应用规则并重启容器测试。 --- #### **5. 验证跨子网访问** 1. 在宿主机执行`ipconfig`查看局域网IP(如192.168.1.100)。 2. 在另一子网设备访问`http://192.168.1.100:3000`,若成功加载即配置生效。 3. 若失败,检查宿主机防火墙日志或使用`telnet 192.168.1.100 3000`测试端口连通性。 --- ### 附加优化建议 - **使用Docker Compose统一管理网络**:通过`docker-compose.yml`定义服务和网络,确保所有容器在统一子网中[^4]。 - **绑定宿主机物理网卡**:在Hyper-V管理器中为Docker虚拟交换机配置**外部网络**模式,直接桥接物理网卡[^2]。 ---
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百年孤独百年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值