
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
GitHub: https://github.com/hwdsl2/docker-embeddings
属于https://github.com/hwdsl2/self-hosted-ai-stack的一部分——通过单条命令部署完整的自托管AI栈。
该Docker镜像用于运行自托管文本嵌入与重排序服务器,基于https://github.com/huggingface/text-embeddings-inference。提供OpenAI兼容的`/v1/embeddings` API和/rerank端点,设计目标为简单、私密、自托管。
📘 新书推荐: 自托管AI构建者指南——学习如何将该服务部署为完整、默认安全的私有AI栈的一部分。
POST /v1/embeddings端点——任何使用OpenAI嵌入API的应用只需一行代码即可切换到自托管版本BAAI/bge-small-en-v1.5、BAAI/bge-m3、nomic-embed-text-v1.5等POST /rerank)——启用交叉编码器模型重新评分检索文档,提升检索精度embed_manage进行模型管理EMBED_LOCAL_ONLY)linux/amd64、linux/arm64使用以下命令设置文本嵌入服务器:
bashdocker run \ --name embeddings \ --restart=always \ -v embeddings-data:/var/lib/embeddings \ -p 8000:8000 \ -d docker.xuanyuan.run/hwdsl2/embeddings-server
注意: 对于面向互联网的部署,强烈建议使用反向代理添加HTTPS。此时,将-p 8000:8000替换为-p 127.0.0.1:8000:8000,以防止直接访问未加密端口。
默认模型BAAI/bge-small-en-v1.5(约130MB)将在首次启动时下载并缓存。查看日志确认服务器就绪:
bashdocker logs embeddings
看到“Text embeddings server is ready”后,生成第一个嵌入:
bashcurl http://您的服务器IP:8000/v1/embeddings \ -H "Content-Type: application/json" \ -d '{"input": "The quick brown fox", "model": "text-embedding-ada-002"}'
响应:
json{"object":"list","data":[{"object":"embedding","embedding":[0.032,...,-0.017],"index":0}],"model":"BAAI/bge-small-en-v1.5","usage":{"prompt_tokens":5,"total_tokens":5}}
所有变量均为可选。新安装并挂载/var/lib/embeddings卷时会自动生成Bearer令牌。无密钥的现有安装保持开放以兼容旧版本。
该镜像使用以下变量(可在env文件中声明,见示例):
| 变量 | 描述 | 默认值 |
|---|---|---|
EMBED_MODEL | 用于嵌入的HuggingFace模型ID,见模型表 | BAAI/bge-small-en-v1.5 |
EMBED_PORT | API的HTTP端口(1–65535) | 8000 |
EMBED_API_KEY | 可选Bearer令牌,新持久化安装自动生成。若设置,所有API请求需包含Authorization: Bearer <key>。显式设为空可禁用认证 | 新持久化安装自动生成 |
EMBED_HF_TOKEN | 访问私有或 gated 模型的HuggingFace Hub令牌,公共模型无需 | (未设置) |
EMBED_LOCAL_ONLY | 设为非空值(如true)时禁用所有HuggingFace模型下载,适用于预缓存模型的离线部署 | (未设置) |
EMBED_ENABLED | 设为false禁用嵌入进程(仅重排序模式) | true |
RERANK_ENABLED | 设为true启用重排序服务器(交叉编码器模型在独立端口) | (未设置) |
RERANK_MODEL | 用于重排序的HuggingFace交叉编码器模型ID,见重排序模型 | BAAI/bge-reranker-v2-m3 |
RERANK_PORT | 重排序API的HTTP端口,若嵌入禁用则默认8000 | 8001 |
RERANK_API_KEY | 重排序的可选Bearer令牌,未设置则 fallback 到EMBED_API_KEY,显式设为空可禁用 | (fallback到EMBED_API_KEY) |
EMBED_DISABLE_USAGE_COUNTS | 设为1禁用***聚合使用统计 | (未设置) |
示例使用env文件:
bashcp embed.env.example embed.env # 编辑embed.env后执行: docker run \ --name embeddings \ --restart=always \ -v embeddings-data:/var/lib/embeddings \ -v ./embed.env:/embed.env:ro \ -p 8000:8000 \ -d docker.xuanyuan.run/hwdsl2/embeddings-server
bashcp embed.env.example embed.env # 编辑embed.env后执行: docker compose up -d docker logs embeddings
docker-compose.yml示例(已包含):
yamlservices: embeddings: image: docker.xuanyuan.run/hwdsl2/embeddings-server container_name: embeddings restart: always ports: - "8000:8000/tcp" # 若使用主机反向代理,改为"127.0.0.1:8000:8000/tcp" # - "8001:8001/tcp" # 重排序API(若embed.env中RERANK_ENABLED=true则取消注释) volumes: - embeddings-data:/var/lib/embeddings - ./embed.env:/embed.env:ro volumes: embeddings-data: name: embeddings-data
POST /v1/embeddings Content-Type: application/json
参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
input | 字符串或数组 | ✅ | 需嵌入的文本,单字符串或字符串数组(批量嵌入) |
model | 字符串 | ✅ | 任意字符串(如text-embedding-ada-002),仅为API兼容,实际使用EMBED_MODEL设置的模型 |
示例(带API密钥):
bashcurl http://您的服务器IP:8000/v1/embeddings \ -H "Authorization: Bearer 您的API密钥" \ -H "Content-Type: application/json" \ -d '{"input": "您的文本", "model": "text-embedding-ada-002"}'
需在env文件中设置
RERANK_ENABLED=true,默认运行在8001端口。
POST /rerank Content-Type: application/json
参数:
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
query | 字符串 | ✅ | 用于排名的搜索查询 |
texts | 字符串数组 | ✅ | 需重排序的文档 |
raw_scores | 布尔值 | 若为true返回原始交叉编码器分数,否则返回归一化分数,默认false | |
truncate | 布尔值 | 若为true截断超过模型最大长度的输入,默认true |
使用容器内的embed_manage脚本管理服务器:
docker exec embeddings embed_manage --showinfodocker exec embeddings embed_manage --listmodelsdocker exec embeddings embed_manage --pullmodel BAAI/bge-base-en-v1.5docker exec embeddings embed_manage --pullmodel BAAI/bge-base-en-v1.5embed.env中的EMBED_MODELdocker restart embeddings推荐模型:
| 模型 | 磁盘大小 | 内存(约) | 说明 |
|---|---|---|---|
BAAI/bge-small-en-v1.5 | ~130MB | ~250MB | 最快,英文——默认 |
BAAI/bge-m3 | ~570MB | ~1GB | 多语言,跨语言检索 |
nomic-ai/nomic-embed-text-v1.5 | ~550MB | ~1GB | 多语言,长上下文(8192 tokens) |
启用重排序需设置RERANK_ENABLED=true,支持三种模式:
RERANK_ENABLED未设置RERANK_ENABLED=trueEMBED_ENABLED=false且RERANK_ENABLED=true面向互联网的部署需使用反向代理添加HTTPS,推荐Caddy或Nginx。新安装自动生成API密钥,可通过docker exec embeddings embed_manage --showkey查看。
ghcr.io/huggingface/text-embeddings-inference:cpu-latest(Debian)/var/lib/embeddings(Docker卷)该镜像包含的软件组件(如Hugging Face TEI及其依赖)遵循各自版权持有者选择的许可证。使用前请确保符合所有组件的许可证要求。
本项目遵循https://opensource.org/licenses/MIT,Hugging Face TEI遵循https://github.com/huggingface/text-embeddings-inference/blob/main/LICENSE。
本项目是Hugging Face TEI的独立Docker部署,与Hugging Face Inc.无关联、背书或赞助关系。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务