636 字
3 分钟
Docker 容器走宿主机代理:127.0.0.1 陷阱与 UFW 放行实战
一次 Antigravity Manager 容器内 Google OAuth 登录失败的排查复盘。整个问题复盘下来其实很清晰,关键点只有两个:
127.0.0.1对 Docker 容器来说不是宿主机。
UFW 又挡住了 Docker → 宿主机 7892 的连接。
1. 最开始的问题
Antigravity Manager 在 Docker 里,Google OAuth 登录失败:
oauth2.googleapis.com/tokenoperation timed out也就是 Antigravity 容器访问 Google 不通。
2. 为什么主机的 127.0.0.1:7892 能用?
宿主机上的代理客户端(CatCore)监听:
*:7892主机执行:
curl -x http://127.0.0.1:7892 ...可以正常访问 Google。
但是:
主机的 127.0.0.1 ≠Docker 容器的 127.0.0.1容器里的 127.0.0.1 指的是容器自己,而不是宿主机。
3. 选择方案:走 Docker 网桥
让容器通过 Docker 网桥访问宿主机:
172.17.0.1:7892理论路径:
Antigravity ↓172.17.0.1:7892 ↓CatCore ↓Google4. 第一次测试为什么失败?
容器测试:
docker exec antigravity-manager sh -c \'curl -x http://172.17.0.1:7892 -I https://oauth2.googleapis.com'超时。
后来检查发现:
docker0 = 172.17.0.1CatCore = *:7892UFW = 激活而 UFW 当时基本只允许:
22/tcp所以判断是 UFW 把 Docker → 7892 的连接挡住了。
5. 放行 Docker → 7892
执行:
sudo ufw allow in on docker0 to any port 7892 proto tcp再次测试:
docker exec antigravity-manager sh -c \'curl --connect-timeout 3 -I -x http://172.17.0.1:7892 https://oauth2.googleapis.com'成功:
HTTP/1.1 200 Connection establishedHTTP/2 404这里的 404 不是问题——它只是对根路径 HEAD 请求的正常响应。
它说明:
Docker容器 ↓UFW ↓CatCore ↓Google整个网络链路已经打通。
6. 为什么还要重建 Antigravity?
因为刚才的 curl -x:
curl -x http://172.17.0.1:7892 ...只是临时测试,它不会改变 Antigravity 程序本身的代理配置。
所以需要在容器环境变量里加入:
HTTP_PROXY=http://172.17.0.1:7892HTTPS_PROXY=http://172.17.0.1:7892这样 Antigravity 自己发起 Google OAuth 请求时,也会走 CatCore。
7. 为什么不改 docker.service.d/proxy.conf?
因为那个配置:
/etc/systemd/system/docker.service.d/proxy.conf作用于:
Docker daemon → 代理例如 docker pull。
它不会自动把容器内所有程序的代理环境变量设置好。
所以:
Docker daemon ↓127.0.0.1:7892 ← 可以保持原样
Antigravity container ↓172.17.0.1:7892 ← 单独配置这是两个不同层次。
8. 最终操作
按三步走:
docker stop antigravity-managerdocker rm antigravity-manager然后用增加了:
-e HTTP_PROXY=http://172.17.0.1:7892 \-e HTTPS_PROXY=http://172.17.0.1:7892 \的 docker run 重建。
原有的数据卷挂载:
-v ~/.antigravity_tools:/root/.antigravity_tools会保留数据。
小结
| 层次 | 代理地址 | 配置位置 |
|---|---|---|
Docker daemon(docker pull) | 127.0.0.1:7892 | docker.service.d/proxy.conf |
| 容器内程序 | 172.17.0.1:7892 | 容器环境变量 HTTP_PROXY / HTTPS_PROXY |
容器要走宿主机代理,需要同时满足三个条件:地址用 172.17.0.1 而非 127.0.0.1、UFW 放行 docker0 上的代理端口、程序本身通过环境变量感知代理。
Docker 容器走宿主机代理:127.0.0.1 陷阱与 UFW 放行实战
https://blog.xqcherry.top/posts/operations/docker-container-proxy-via-docker0-ufw/ 目录