容器连不上宿主机本地模型(Connection Refused / Timeout)
一步步排查宿主机 127.0.0.1 回环绑定限制、Linux 容器内 host.docker.internal 缺失及防火墙拦截。
在宿主机终端执行以下命令,查看 11434 端口绑定的是 127.0.0.1 还是 *:11434 (0.0.0.0)?
lsof -nP -iTCP:11434 -sTCP:LISTEN || ss -tlnp | grep 11434
若显示 127.0.0.1:11434,来自 Docker 网桥容器的任何请求都会直接返回 Connection Refused。
「容器连不上宿主机本地模型(Connection Refused / Timeout)」的全部 3 步终端探测命令与分支判据
无需逐层点击交互,以下列出本故障决策树每一层的宿主机只读探测命令、预期基线提示与输出流向。
在宿主机终端执行以下命令,查看 11434 端口绑定的是 127.0.0.1 还是 *:11434 (0.0.0.0)?
lsof -nP -iTCP:11434 -sTCP:LISTEN || ss -tlnp | grep 11434
若显示 127.0.0.1:11434,来自 Docker 网桥容器的任何请求都会直接返回 Connection Refused。
- • 显示 127.0.0.1:11434(仅限本机回环访问)
→ sol-bind-all-interfaces - • 显示 *:11434 或 0.0.0.0:11434(已放开监听)
→ step-container-url
你在容器(如 Open WebUI / n8n / Dify)里填写的 Ollama 接口地址是什么?
docker exec -it tinker-open-webui sh -c "env | grep -E 'OLLAMA|API'"
- • 填了 http://localhost:11434 或 http://127.0.0.1:11434
→ sol-container-localhost-trap - • 已填 http://host.docker.internal:11434 但依然报错
→ step-linux-gateway-or-firewall
在容器内执行下方探测命令,观察报错是“bad address(无法解析域名)”还是“timed out(连接超时)”?
docker exec tinker-open-webui sh -c "getent hosts host.docker.internal && wget -qO- --timeout=5 http://host.docker.internal:11434/api/version"
- • getent 无输出或报 bad address(Linux Docker 环境)
→ sol-linux-extra-hosts - • 能解析出 172.17.0.1,但请求一直卡住直到 Timeout
→ sol-ufw-firewall-bridge
「容器连不上宿主机本地模型(Connection Refused / Timeout)」包含的 4 类根因、修复代码与验收命令
修复方案:将宿主机 Ollama 监听地址设为 0.0.0.0
sol-bind-all-interfacesOllama 默认仅绑定 127.0.0.1:11434。来自 Docker 网桥虚拟网卡(172.17.0.x)的数据包会被宿主机内核直接拒绝。
- macOS 环境:通过 launchctl 设置 OLLAMA_HOST 环境变量,并彻底重启 Ollama 客户端。
- Linux systemd 环境:使用 systemctl edit ollama.service 写入 OLLAMA_HOST=0.0.0.0:11434 并重启服务。
- 安全边界提醒:开放 0.0.0.0 后,请确保云服务器安全组或局域网防火墙未将 11434 暴露至公网。
# macOS (launchctl) launchctl setenv OLLAMA_HOST "0.0.0.0:11434" # Then Quit and Reopen Ollama.app # Linux (systemd override) sudo mkdir -p /etc/systemd/system/ollama.service.d printf "[Service]\nEnvironment=\"OLLAMA_HOST=0.0.0.0:11434\"\n" | sudo tee /etc/systemd/system/ollama.service.d/override.conf sudo systemctl daemon-reload && sudo systemctl restart ollama
[边界说明]绑定 0.0.0.0 会使无鉴权的 Ollama 接口对同局域网设备可见,生产机器建议仅绑定 docker0 IP 或配置防火墙白名单。
lsof -nP -iTCP:11434 -sTCP:LISTEN修复方案:将容器内的 localhost 替换为 host.docker.internal
sol-container-localhost-trap在容器独立的网络命名空间内,localhost / 127.0.0.1 指向容器自身,而不是运行本地模型的宿主机。
- 将容器环境变量 OLLAMA_BASE_URL 或工作流请求地址改为 http://host.docker.internal:11434。
- 在 docker-compose.yml 中补充 extra_hosts: ["host.docker.internal:host-gateway"]。
services:
open-webui:
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
extra_hosts:
- "host.docker.internal:host-gateway"[边界说明]配合 extra_hosts 后,该配置可在 macOS、Windows Docker Desktop 与 Linux Docker Engine 下保持完全一致。
docker exec tinker-open-webui wget -qO- http://host.docker.internal:11434/api/version修复方案:在 Linux Docker 中显式映射 host-gateway
sol-linux-extra-hosts与 Mac/Windows 的 Docker Desktop 不同,原生 Linux Docker 默认不会往容器 /etc/hosts 注入 host.docker.internal。
- 在 docker-compose.yml 对应服务下添加 extra_hosts: ["host.docker.internal:host-gateway"]。
- 执行 docker compose up -d --force-recreate 重建容器使 hosts 映射生效。
docker run -d \ --name tinker-open-webui \ --add-host=host.docker.internal:host-gateway \ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ -p 3000:8080 \ ghcr.io/open-webui/open-webui:v0.5.10
[边界说明]需要宿主机 Docker Engine 版本 ≥ 20.10。
docker exec tinker-open-webui getent hosts host.docker.internal修复方案:在宿主机防火墙放行 Docker 网桥子网请求
sol-ufw-firewall-bridgeLinux 宿主机的 UFW 或 firewalld 拦截了来自 docker0 / 自定义网桥(172.16.0.0/12)发往宿主机 11434 端口的数据包。
- 仅针对 Docker 私有网段(172.16.0.0/12)放行宿主机 11434 TCP 端口,避免对公网敞开。
- 重载防火墙规则并重新在容器内执行探测。
sudo ufw allow from 172.16.0.0/12 to any port 11434 proto tcp comment "Allow Docker containers to local Ollama" sudo ufw reload
[边界说明]限制源网段为 172.16.0.0/12 可确保只有本机容器能访问模型接口,外部局域网依然受防火墙保护。
docker exec tinker-open-webui wget -qO- --timeout=5 http://host.docker.internal:11434/api/version容器连不上宿主机模型:最小复现和诊断步骤
用三条确定性终端命令,彻底解决 Open WebUI、n8n 或 Dify 容器访问宿主机 11434 端口报 Connection Refused 或 Timeout 的高频故障。
Ubuntu 24.04(Docker Engine 27.x + UFW 防火墙)与 macOS 15(Docker Desktop 4.36)双平台实测
Docker Engine 27.x · Ollama 0.5.7 · Open WebUI v0.5.10 · n8n 1.76.x
纯本机回环与容器网桥通信 — 包含严格的网桥子网防火墙策略,在向本机容器放行 11434 的同时阻止外部网络访问。