我想运行 Ollama docker 镜像。这将公开其端点的整个 API。
我想通过在其上添加反向代理来确保其安全,并且我选择了 Nginx 来完成这项工作。
所以我需要使用 Ollama 将 Nginx 添加到我的 docker 镜像中。
因此我构建了这样的Dockerfile:
FROM ollama/ollama:latest
FROM nginx:latest
COPY /.nginx/nginx.conf /etc/nginx/conf.d/default.conf
我的 Nginx 配置:
server {
listen 80;
location /api/tags {
proxy_pass http://localhost:11434/api/tags;
proxy_set_header Host localhost:11434;
}
# Default: Return 404 for all other endpoints
location / {
return 404;
}
}
在这里我只允许一个端点代理到 Ollama。
为了测试它,我尝试了一些端点并且它们正确返回了 404。
但是当我尝试api/tags
路径时,出现了“Bad gateway”502 错误。
在docker日志中我可以看到:
2024-12-01 22:44:41 2024/12/01 21:44:41 [警告] 29#29:*1 连接到上游时上游服务器暂时禁用,客户端:172.17.0.1,服务器:,请求:“GET /api/tags HTTP/1.1”,上游:“http://127.0.0.1:11434/api/tags”,主机:“localhost:8000”
2024-12-01 22:44:41 2024/12/01 21:44:41 [错误] 29#29:*1 connect() 连接到上游时失败(111:连接被拒绝),客户端:172.17.0.1,服务器:,请求:“GET /api/tags HTTP/1.1”,上游:“http://127.0.0.1:11434/api/tags”,主机:“localhost:8000”
2024-12-01 22:44:41 2024/12/01 21:44:41 [警告] 29#29:*1 连接到上游时上游服务器暂时禁用,客户端:172.17.0.1,服务器:,请求:“GET /api/tags HTTP/1.1”,上游:“http://127.0.0.1:11434/api/tags”,主机:“localhost:8000”
2024-12-01 22:44:41 172.17.0.1 - - [01/Dec/2024:21:44:41 +0000] “GET /api/tags HTTP/1.1” 502 559 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0” “-”
看起来 Ollama 服务器没有运行,但我不知道:
- 如何检查Docker 中正在运行的进程,
ps
在docker中找不到命令。 - 如何运行 Ollama 服务器?
- 如何在Docker中定义如何自动启动Ollama服务器?
您无法按照您尝试的方式创建包含多个程序的 Docker 映像。您拥有的 Dockerfile 将导致仅包含 Nginx 而不包含 Ollama 的映像。通常还建议在容器中只运行一个进程。
我建议在各自的容器中运行 Ollama 和 Nginx,并使用 Docker Compose 对它们进行编排。
创建
docker-compose.yml
包含以下内容的文件然后更改 nginx.conf 文件,以便它使用服务名称将请求传递给 Ollama 容器,
ollama
而不是localhost
像这样:您的 Dockerfile 将按原样工作,因为第一行实际上被忽略了。但为了保持整洁,您应该将其更改为
docker compose up -d
将启动两个容器。当请求进入 Nginx 时,http://localhost/api/tags
它会将其传递到/api/tags
端口 11434 上的 Ollama 容器。我认为主要问题是 Dockerfile 和当前配置不允许同时启动两个服务(Ollama 和 Nginx)。
为什么 ?
(1)Dockerfile不完整
原文仅包含:
该Dockerfile没有指定如何启动服务或它们如何相互作用。
(2)日志对此很清楚
在提供的日志中,可以看到明显的连接错误:
这个错误是Nginx无法连接Ollama,提示Ollama服务没有启动或者无法访问。