在 Docker 中运行的 Ollama 实际上是以容器化的形式部署服务,而 ollama
命令行工具默认不会直接安装到宿主机系统中。以下是解决方法:
1. 直接通过容器运行命令
方式一:通过 docker exec
在容器内执行
# 进入已运行的 Ollama 容器内部执行命令
docker exec -it ollama ollama run llama3
方式二:通过 docker run
临时运行命令
# 在每次使用时运行一个临时容器
docker run --rm -v ollama:/root/.ollama -p 11434:11434 ollama/ollama ollama run llama3
2. 映射 Ollama 服务端口到宿主机
Ollama 的 HTTP API 默认监听端口 11434
,您可以直接通过 HTTP 访问它(无需 ollama
命令):
运行容器时映射端口:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
通过 HTTP 接口与 Ollama 交互:
# 查询模型列表
curl http://localhost:11434/api/tags
# 运行模型交互
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "你好,世界"
}'
3. 在宿主机安装 ollama
CLI 工具(推荐)
如果希望直接在宿主机使用 ollama
命令,需额外安装客户端工具:
Linux/macOS/WSL:
curl -fsSL https://ollama.com/install.sh | sh
Windows:
- 下载安装包从官网:https://ollama.com/download
- 安装后确保
ollama
命令已添加到PATH
环境变量。
4. 配置 Ollama 客户端连接 Docker 容器
如果宿主机安装的 ollama
CLI 需要连接到 Docker 容器中的服务,需指定服务地址:
设置环境变量:
# Linux/macOS/WSL
export OLLAMA_HOST=http://localhost:11434
# Windows(PowerShell)
$env:OLLAMA_HOST="http://localhost:11434"
验证连接:
ollama list # 应返回 Docker 容器内的模型列表
可能遇到的报错及解决
报错:Error: Get "http://localhost:11434/...": dial tcp 127.0.0.1:11434: connect: connection refused
-
检查容器是否运行:
docker ps -a | grep ollama
- 如果未运行,启动容器:
docker start ollama
- 如果未运行,启动容器:
-
验证端口映射:
docker port ollama 11434 # 应输出 0.0.0.0:11434
- 如果未映射,重新运行容器:
docker run -d -p 11434:11434 --name ollama ollama/ollama
- 如果未映射,重新运行容器:
总结
场景 | 解决方案 | 优点 | 缺点 |
---|---|---|---|
直接使用容器内命令 | docker exec 或 docker run | 无需额外配置 | 命令冗长,无法原生集成 Shell |
通过 HTTP API 交互 | 使用 curl 或其他 HTTP 客户端 | 灵活,适合脚本调用 | 需要手动构造请求 |
宿主机安装 CLI 工具 | 官网安装后连接容器 | 原生体验 | 需要配置 OLLAMA_HOST |
建议选择 宿主机安装 CLI 工具 + 指定 OLLAMA_HOST
的组合,体验最接近原生。