Docker 容器如何使用宿主机 Clash 代理
副标题 / 摘要 宿主机能访问 OpenAI,不代表 Docker 容器也能访问。本文记录一次 sub2api 容器无法完成 OpenAI OAuth 的排障过程,并给出一种不绑定 Docker 网段 IP 的配置方式。 目标读者 使用 Docker Compose 部署服务的开发者 在服务器上使用 Clash、Mihomo 或类似代理的用户 遇到容器内访问 OpenAI、GitHub、Google 等服务超时的人 需要理解 127.0.0.1、Docker 网桥和宿主机代理关系的人 背景 / 动机 问题表面上是 sub2api 后台提示: 未设置代理,当前服务器无法直连 OpenAI,导致 OpenAI OAuth 请求失败。 请先选择可访问 OpenAI 的代理后重试;如果授权码已失效,请重新生成授权链接。 容易产生的疑问是:我的电脑明明可以访问 OpenAI,Codex 也能用,为什么 Docker 里的服务不行? 原因是 Codex、浏览器、终端和 Docker 容器不一定走同一条网络路径。宿主机上的程序可以使用 127.0.0.1:7890 代理,但容器里的 127.0.0.1 指向的是容器自己,不是宿主机。 核心概念 宿主机的 127.0.0.1 不是容器的 127.0.0.1 如果 Clash 只监听: 127.0.0.1:7890 那么只有宿主机本机进程能访问它。Docker 容器访问 127.0.0.1:7890 时,访问的是容器内部的 7890 端口,通常什么都没有。 ...