52 lines
3.4 KiB
Markdown
52 lines
3.4 KiB
Markdown
---
|
||
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 应用无需额外配置即可使用代理环境变量
|