Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行
文章目录
- Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型
- 1. 安装 Docker Desktop
- 2. 使用Docker拉取Anythingllm镜像
- 2. 设置 `STORAGE_LOCATION` 路径
- 3. 创建存储目录和 `.env` 文件
- `.env` 文件的作用
- 关键配置项
- 4. 运行 Docker 命令
- `docker run` 命令详细解析
- 各部分的含义
- 5. 访问应用
- 6. 配置环境
- 聊天设置
- 向量数据库
- 嵌入首选项
- 添加知识库
- 成员管理
- 局域网内其他用户访问
- 7. 总结
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 的文档目录,可以按以下步骤操作,逐行运行如下命令,如下图,这三行可以从如下面代码行中复制。

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

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

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

添加知识库
点击工作区的上传按钮:

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

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

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

可以为用户选择不同的角色。不同角色持有的权限是不同的
局域网内其他用户访问
首先查看部署本机的IPv4地址,例如1.1.1.1
局域网内其他用户浏览器访问:1.1.1.1:3001即可
如下图所示

这应该是几个常用的内容,其他东西,请自行研究
7. 总结
在 Windows CMD 中运行 Docker 命令的步骤如下:
- 设置环境变量
STORAGE_LOCATION,并确保该路径存在。 - 创建必要的存储目录和
.env文件。 - 使用单行命令在 CMD 中运行 Docker 容器。
- 通过浏览器访问
http://localhost:3001进行初始化配置。
相关文章:
Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行
文章目录 Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…...
AI前端开发技能提升与ScriptEcho:拥抱AI时代的前端开发新范式
随着人工智能技术的飞速发展,AI前端开发岗位对技能的要求也水涨船高。越来越多的企业需要具备AI相关知识和高级前端开发能力的工程师,这使得传统的前端开发模式面临着巨大的挑战。如何提升开发效率,降低人力成本,成为了摆在所有前…...
【Redis存在线程安全问题吗?】
Redis存在线程安全问题吗? Redis的线程安全性概述Redis线程安全性的挑战Redis线程安全性的示例示例1:客户端并发访问导致的问题示例2:分布式环境下的问题解决Redis线程安全问题的建议总结Redis的线程安全性概述 Redis本身是一个单线程的键值存储数据库,它使用单线程模型来…...
碎碎念,再聊HyperRAM(CrosslinkNX FPGA+HyperRAM)
作者:Hello,Panda HyperRAM其实熊猫君很久以前在用了,几年前也分享了一篇实现HyperRAM控制器的博文(博文《Lattice CrossLinkNx LIFCL-40应用连载7-使用HyperRAM存储器》。近期在后台收到好几位朋友咨询一些关于HyperRAM的问题&a…...
左移架构 -- 从攒批,湖仓到使用数据流的实时数据产品
编辑导读: 这篇文章翻译自 Kai Waehner的 《The Shift Left Architecture – From Batch and Lakehouse to Real-Time Data Products with Data Streaming》。文章通过数据产品的概念引出了如何创建可重复使用的数据产品使企业能够从当前和未来的数据中获得价值。基于构建数据产…...
多模态识别和自然语言处理有什么区别
在科技飞速发展的当下,人工智能(AI)已经渗透到我们生活的方方面面。不知道大家有没有这样的经历:早上醒来,对着智能音箱说 “播放今天的新闻”,音箱不仅能识别你的语音,还能在播放新闻的同时&am…...
进阶——第十六蓝桥杯嵌入式熟练度练习(串口的小BUG补充-字符接受不完整和字符接受错误)
1.解决接受不完整问题 假如没接受完成,执行函数,就可能会把count直接清零,就会重新接受\ while (1){if(rx_count!0){uint8_t temprx_count;HAL_Delay(1);if(temprx_count)uart_proc(); }key_proc();rxclear_proc();/* USER CODE END WHILE…...
数据结构-链式二叉树
文章目录 一、链式二叉树1.1 链式二叉树的创建1.2 根、左子树、右子树1.3 二叉树的前中后序遍历1.3.1前(先)序遍历1.3.2中序遍历1.3.3后序遍历 1.4 二叉树的节点个数1.5 二叉树的叶子结点个数1.6 第K层节点个数1.7 二叉树的高度1.8 查找指定的值(val)1.9 二叉树的销毁 二、层序…...
【git-hub项目:YOLOs-CPP】本地实现01:项目构建
目录 写在前面 项目介绍 最新发布说明 Segmentation示例 功能特点 依赖项 安装 克隆代码仓库 配置 构建项目 写在前面 前面刚刚实现的系列文章: 【Windows/C++/yolo开发部署01】 【Windows/C++/yolo开发部署02】 【Windows/C++/yolo开发部署03】 【Windows/C++/yolo…...
250213-RHEL8.8-外接SSD固态硬盘
It seems that the exfat-utils package is still unavailable, even after enabling the RPM Fusion repository. This could happen if the repository metadata hasn’t been updated or if the package isn’t directly available in the RPM Fusion repository for RHEL 8…...
如何本地部署DeepSeek?
DeepSeek:智能时代的得力助手 在人工智能技术飞速发展的今天,DeepSeek 作为一款由国内顶尖团队研发的 AI 工具,凭借其卓越的性能和丰富的功能,逐渐在众多同类产品中脱颖而出,成为众多用户在工作和学习中的得力助手。 …...
leetcode:627. 变更性别(SQL解法)
难度:简单 SQL Schema > Pandas Schema > Salary 表: ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int …...
51单片机(国信长天)矩阵键盘的基本操作
在CT107D单片机综合训练平台上,首先将J5处的跳帽接到1~2引脚,使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应的数字:从左至右&…...
封装一个sqlite3动态库
作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目案例 二…...
Transformer以及BERT阅读参考博文
Transformer以及BERT阅读参考博文 Transformer学习: 已有博主的讲解特别好了: 李沐:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili知乎:Transformer模型详解(图解最完整版) - 知乎 个人杂想&…...
AI学习记录 - 最简单的专家模型 MOE
代码 import torch import torch.nn as nn import torch.nn.functional as F from typing import Tupleclass BasicExpert(nn.Module):# 一个 Expert 可以是一个最简单的, linear 层即可# 也可以是 MLP 层# 也可以是 更复杂的 MLP 层(active function 设…...
急停信号的含义
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…...
单调队列queue
1.单调队列(Monotonic Queue) 单调队列是一种特殊的队列,它的元素按照单调性(递增或递减)的顺序排列。简单来说,单调队列会维护一个元素单调递增或递减的顺序,在队列中元素会根据当前队列的元素…...
【漫话机器学习系列】091.置信区间(Confidence Intervals)
置信区间(Confidence Intervals)详解 1. 引言 在统计学和数据分析中,我们通常希望通过样本数据来估计总体参数。然而,由于抽样的随机性,我们不可能得到精确的总体参数,而只能通过估计值(如均值…...
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x99
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x99 这个错误通常发生在你尝试使用 GBK 编码来解码一个包含非GBK编码字符的文件时。GBK 是一种用于简体中文的字符编码方式,它不支持所有可能的 Unicode 字符。 解决方法 明确文件的正确编码:首…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
