本地Ollama+Llama3在Colab本地运行时连接失败求助
问题分析与解决方案
错误ConnectError: [Errno 111] Connection refused的核心原因是:Docker部署的Colab运行时处于隔离的网络环境中,无法直接访问宿主机上默认仅监听127.0.0.1的Ollama服务。
解决步骤
1. 让Ollama允许外部访问
Ollama默认只绑定127.0.0.1,仅允许宿主机本地访问。需要修改其监听地址为0.0.0.0,允许所有网络接口访问:
- 临时生效:重启Ollama时指定环境变量
OLLAMA_HOST=0.0.0.0 ollama serve - 永久生效(以Linux systemd服务为例):
编辑Ollama的systemd配置文件(通常在/etc/systemd/system/ollama.service.d/environment.conf),添加:
然后重载配置并重启服务:[Service] Environment="OLLAMA_HOST=0.0.0.0"sudo systemctl daemon-reload sudo systemctl restart ollama
2. 让Colab容器能访问宿主机的Ollama
有两种可选方案:
方案A:使用Docker Host网络模式启动Colab运行时
这种模式下,容器与宿主机共享网络栈,容器内的127.0.0.1直接指向宿主机,无需额外配置:
sudo docker run --network host us-docker.pkg.dev/colab-images/public/runtime
启动后,Colab代码无需修改,直接调用Ollama即可。
方案B:保持原有端口映射,在代码中指定宿主机IP
如果不想用Host网络,需要在代码中指定宿主机的实际IP(或Docker提供的内部域名host.docker.internal):
import ollama # 设置Ollama服务地址为宿主机IP(替换成你的宿主机局域网IP,比如192.168.1.100) ollama.set_host('http://host.docker.internal:11434') MODEL = 'llama3' def llm_response(content): response = ollama.chat( model=MODEL, messages=[{"role": "user", "content": content}] ) return response["message"]["content"]
注意:
host.docker.internal在Windows/macOS Docker中默认可用,Linux Docker需要添加--add-host=host.docker.internal:host-gateway参数启动容器:sudo docker run -p 127.0.0.1:9000:8080 --add-host=host.docker.internal:host-gateway us-docker.pkg.dev/colab-images/public/runtime
验证
完成上述配置后,在Colab中运行简化代码测试:
import ollama ollama.chat(model='llama3', messages=[{"role": "user", "content": "The cat sat on the mat"}])
内容的提问来源于stack exchange,提问作者disruptive
相关产品推荐
相关产品推荐

