容器连通性故障排除
本指南总结了我们在使用 Docker Compose 或 Kubernetes 运行 Router 时遇到的常见连通性问题及其解决方法。同时也涵盖了 Grafana 中的"无数据"问题以及如何验证完整的 metrics 链。
1. Backend Endpoint 使用 IPv4 地址
症状
- Router/Envoy 超时、5xx 错误,或 Prometheus 中出现"up/down"抖动。从容器/Pod 内部执行 curl 失败。
根本原因
- Backend 仅绑定到 127.0.0.1(从容器/Pod 无法访问)。
- 使用 IPv6 或解析为 IPv6 的主机名,而 IPv6 被禁用/阻止。
- 在 Router 配置中使用 localhost/127.0.0.1,这指向容器本身而非宿主机。
解决方法
- 确保 backend 绑定到所有接口:0.0.0.0。
- 在 Docker Compose 中,配置 Router 通过可达的 IPv4 地址调用宿主机。
- 在 macOS 上,host.docker.internal 通常有效;如果无效,使用宿主机的局域网 IPv4 地址。
- 在 Linux 或自定义网络上,使用您网络的 Docker 主机网关 IPv4。
示例:在宿主机上启动 vLLM
# 让 vLLM 监听所有接口
python -m vllm.entrypoints.openai.api_server \
--host 0.0.0.0 --port 11434 \
--served-model-name phi4
Router 配置示例(Docker Compose)
# config/config.yaml(片段)
llm_backends:
- name: phi4
# 使用可达的 IPv4;替换为您宿主机的 IP
address: http://172.28.0.1:11434
Kubernetes 推荐模式:使用 Service
apiVersion: v1
kind: Service
metadata:
name: my-vllm
spec:
selector:
app: my-vllm
ports:
- name: http
port: 8000
targetPort: 8000
然后 Router 配置使用:http://my-vllm.default.svc.cluster.local:8000
提示:从容器内部发现主机网关(主要适用于 Linux)
# 在容器/Pod 内部
ip route | awk '/default/ {print $3}'