--- title: "n8n Docker 配置 Telegram 代理 Troubleshooting" type: source tags: [n8n, docker, http-proxy, https-proxy, telegram, xray, v2ray] date: 2026-05-02 --- ## Source File - [[Home Office/n8n Docker 配置 Telegram 代理 Troubleshooting]] ## Summary(用中文描述) - 核心主题:Docker 容器内运行的 n8n 如何通过宿主机代理访问 Telegram API 的问题排查与解决方案 - 问题域:Docker 网络命名空间隔离、HTTP(S) 代理环境变量、Node.js HTTP 客户端代理行为 - 方法/机制:通过 `extra_hosts` + `host.docker.internal` 打通容器到宿主机代理的路径;利用 axios(n8n 底层)自动读取 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量的特性实现透明代理 - 结论/价值:Docker 容器内应用走宿主机代理的正确配置方式,避免因测试方法不当导致的误判 ## Key Claims(用中文描述) - Docker 容器内的 `127.0.0.1:10808` 指向容器自身,而非宿主机,因此代理不生效 - `host.docker.internal` 通过 `extra_hosts: - "host.docker.internal:host-gateway"` 映射到宿主机 IP,是容器访问宿主机代理的标准方式 - Node.js 原生 `fetch` API **不会**自动读取 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量,不能作为代理生效的测试方法 - n8n 使用 **axios** 发送 HTTP 请求,axios 会自动读取代理环境变量,因此正确配置后 n8n Telegram 节点可以正常工作 - 验证代理是否生效的正确方法是直接在 n8n 的 **HTTP Request 节点** 访问 `api.telegram.org` ## Key Quotes > "node fetch 不会自动使用 `HTTP_PROXY`/`HTTPS_PROXY`,所以容器内的测试命令显示 ETIMEDOUT 是**测试方法有误**,并非代理没生效" — 问题根源分析 > "n8n 使用 axios,axios 会自动读取代理环境变量,所以 n8n 节点内是正常工作的" — axios 行为说明 > "`host.docker.internal` 能工作的前提是 `docker-compose.yml` 中已有 `extra_hosts: - "host.docker.internal:host-gateway"`" — 关键前提条件 ## Key Concepts - [[host.docker.internal]]:Docker 提供的特殊 DNS 名称,在 Linux 上需要 `extra_hosts` 配置才能使用,用于容器访问宿主机网络 - [[HTTP_PROXY 环境变量]]:标准代理配置环境变量,axios、curl 等工具会自动读取并用于 HTTP 请求 - [[Docker extra_hosts]]:`docker-compose.yml` 中的配置项,将宿主机 IP 映射到容器内的 `host.docker.internal` - [[axios HTTP 客户端]]:n8n 底层使用的 HTTP 客户端,会自动遵循 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量 ## Key Entities - [[n8n]]:开源工作流自动化工具,本文档中负责通过 Telegram 节点与 Telegram Bot API 通信 - [[xray/v2ray]]:宿主机上运行的代理服务,监听 `10808` 端口,提供 HTTP/SOCKS 代理能力 - [[Telegram Bot API]](api.telegram.org):Telegram 官方 API,本文档中 n8n 通过代理访问的目标服务 ## Connections - [[n8n]] ← 通过 docker-compose 配置代理环境变量 ← [[xray/v2ray]] - [[n8n]] ← HTTP 请求经由宿主机代理转发 ← [[Telegram Bot API]] ## Contradictions - 与一般"Node.js 应用自动使用代理"的假设冲突: - 冲突点:许多文档暗示所有 Node.js HTTP 请求都会自动走 `HTTP_PROXY` 环境变量 - 当前观点:Node.js 原生 `fetch` 不读取代理环境变量,只有 axios 等封装库才会 - 对方观点:Node.js 应用无需额外配置即可使用代理环境变量