Docker Model Runner
Docker Model Runner 插件允许您
- 从 Docker Hub 拉取模型
- 直接从命令行运行 AI 模型
- 管理本地模型(添加、列出、移除)
- 使用提交的提示或在聊天模式下与模型交互
模型首次使用时会从 Docker Hub 拉取并存储在本地。它们只在运行时接收到请求时加载到内存中,并在不使用时卸载以优化资源。由于模型可能很大,初次拉取可能需要一些时间——但之后,它们会在本地缓存以加快访问速度。您可以使用兼容 OpenAI 的 API 与模型交互。
启用 Docker Model Runner
- 在设置中导航到 开发中功能 选项卡。
- 在 实验性功能 选项卡下,选择 访问实验性功能。
- 选择 应用并重启。
- 退出并重新打开 Docker Desktop 以确保更改生效。
- 打开 Docker Desktop 中的 设置 视图。
- 导航到 开发中功能。
- 在 测试版 选项卡中,勾选 启用 Docker Model Runner 设置。
可用命令
模型运行器状态
检查 Docker Model Runner 是否已激活
$ docker model status
查看所有命令
显示帮助信息和可用子命令列表。
$ docker model help
输出
Usage: docker model COMMAND
Commands:
list List models available locally
pull Download a model from Docker Hub
rm Remove a downloaded model
run Run a model interactively or with a prompt
status Check if the model runner is running
version Show the current version
拉取模型
将模型从 Docker Hub 拉取到您的本地环境。
$ docker model pull <model>
示例
$ docker model pull ai/smollm2
输出
Downloaded: 257.71 MB
Model ai/smollm2 pulled successfully
列出可用模型
列出当前已拉取到您的本地环境的所有模型。
$ docker model list
您将看到类似以下内容
+MODEL PARAMETERS QUANTIZATION ARCHITECTURE MODEL ID CREATED SIZE
+ai/smollm2 361.82 M IQ2_XXS/Q4_K_M llama 354bf30d0aa3 3 days ago 256.35 MiB
运行模型
运行模型并使用提交的提示或在聊天模式下与其交互。
一次性提示
$ docker model run ai/smollm2 "Hi"
输出
Hello! How can I assist you today?
交互式聊天
docker model run ai/smollm2
输出
Interactive chat mode started. Type '/bye' to exit.
> Hi
Hi there! It's SmolLM, AI assistant. How can I help you today?
> /bye
Chat session ended.
移除模型
从您的系统中移除已下载的模型。
$ docker model rm <model>
输出
Model <model> removed successfully
将 Docker Model Runner 集成到您的软件开发生命周期中
您现在可以开始构建由 Docker Model Runner 提供支持的生成式 AI 应用程序了。
如果您想尝试现有的生成式 AI 应用程序,请遵循以下说明。
设置示例应用程序。克隆并运行以下仓库
$ git clone https://github.com/docker/hello-genai.git
在您的终端中,导航到
hello-genai
目录。运行
run.sh
来拉取所选模型并运行应用程序在浏览器中打开仓库 README 中指定的地址访问您的应用程序。
您将看到生成式 AI 应用程序的界面,您可以在其中开始输入提示。
您现在可以与由本地模型提供支持的您自己的生成式 AI 应用程序进行交互。尝试几个提示,注意响应速度有多快——它们都使用 Docker 在您的机器上运行。
常见问题
哪些模型可用?
所有可用模型都托管在 公共 Docker Hub 命名空间 ai
中。
哪些 API 端点可用?
启用该功能后,以下新 API 可用
#### Inside containers ####
http://model-runner.docker.internal/
# Docker Model management
POST /models/create
GET /models
GET /models/{namespace}/{name}
DELETE /models/{namespace}/{name}
# OpenAI endpoints
GET /engines/llama.cpp/v1/models
GET /engines/llama.cpp/v1/models/{namespace}/{name}
POST /engines/llama.cpp/v1/chat/completions
POST /engines/llama.cpp/v1/completions
POST /engines/llama.cpp/v1/embeddings
Note: You can also omit llama.cpp.
E.g., POST /engines/v1/chat/completions.
#### Inside or outside containers (host) ####
Same endpoints on /var/run/docker.sock
# While still in Beta
Prefixed with /exp/vDD4.40
如何通过 OpenAI API 交互?
从容器内部
从另一个容器内部使用 curl
调用 OpenAI 端点 (chat/completions
) 的示例
#!/bin/sh
curl http://model-runner.docker.internal/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
从主机使用 Unix 套接字
从主机使用 curl
通过 Docker 套接字调用 OpenAI 端点 (chat/completions
) 的示例
#!/bin/sh
curl --unix-socket $HOME/.docker/run/docker.sock \
localhost/exp/vDD4.40/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
从主机使用 TCP
如果您想从主机与 API 交互,但使用 TCP 而非 Docker 套接字,您可以从 Docker Desktop GUI 或通过 Docker Desktop CLI 启用主机端 TCP 支持。例如,使用 docker desktop enable model-runner --tcp <port>
。
之后,按照先前文档中的说明,使用 localhost
和选定的或默认端口与其交互。
#!/bin/sh
curl http://localhost:12434/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
已知问题
docker model
未被识别
如果您运行 Docker Model Runner 命令并看到
docker: 'model' is not a docker command
这意味着 Docker 无法找到插件,因为它不在预期的 CLI 插件目录中。
要解决此问题,请创建一个符号链接以便 Docker 可以检测到它
$ ln -s /Applications/Docker.app/Contents/Resources/cli-plugins/docker-model ~/.docker/cli-plugins/docker-model
链接后,重新运行该命令。
运行超大型模型时无保护措施
目前,Docker Model Runner 不包含任何保护措施,无法阻止您启动超出系统可用资源的模型。尝试在主机上运行过大的模型可能会导致严重的系统缓慢或使系统暂时无法使用。在没有足够的 GPU 内存或系统 RAM 的情况下运行大型语言模型 (LLM) 时,此问题尤为常见。
即使拉取失败,model run
也会进入聊天模式
如果模型镜像拉取失败(例如由于网络问题或磁盘空间不足),即使模型实际上不可用,docker model run
命令仍会将您带入聊天界面。这可能导致混淆,因为在没有运行的模型的情况下,聊天将无法正常工作。
您可以手动重试 docker model pull
命令,以确保在再次运行之前镜像可用。
Model CLI 中缺乏一致的摘要支持
Docker Model CLI 目前缺乏通过镜像摘要指定模型的一致支持。作为临时解决方案,您应该按名称而非摘要来引用模型。
初次尝试失败后,拉取进度误报
在某些情况下,如果初次 docker model pull
中途失败,后续成功的拉取可能会误报已下载“0 字节”,即使数据正在后台获取。这可能会给人一种没有发生任何事情的印象,而实际上模型正在被检索。尽管进度输出不正确,拉取通常会按预期完成。
分享反馈
感谢您试用 Docker Model Runner。请通过 启用 Docker Model Runner 设置旁边的 提供反馈 链接提供反馈或报告您发现的任何错误。
禁用此功能
禁用 Docker Model Runner
- 打开 Docker Desktop 中的 设置 视图。
- 导航到 开发中功能 中的 测试版 选项卡。
- 取消勾选 启用 Docker Model Runner 复选框。
- 选择 应用并重启。