3x-ui Docker 搭建与 Clash/Mihomo 订阅分流
本文用 Docker Compose 搭建 3x-ui,并解决几个最常见的问题:订阅导入报 YAML 错误、Clash 节点超时、容器端口未开放,以及如何由 3x-ui 向 Clash/Mihomo 下发分流规则。
1. 用 Docker Compose 启动 3x-ui
创建 docker-compose.yml:
1 | services: |
启动:
1 | docker compose up -d |
面板地址示例:
1 | http://服务器IP:2053/panel/ |
端口映射是关键
2053 和 2096 只分别开放面板和订阅服务,不会自动开放节点入站端口。
例如,面板内创建的 VLESS 入站使用 44584,就必须在 ports 追加:
1 | - "44584:44584" |
当前节点是 VLESS + TCP,不写 /tcp 也可以,Docker 默认就是 TCP。每新建一个不同端口的入站,都要同步映射对应端口,然后重新执行:
1 | docker compose up -d |
还要在云服务器安全组和系统防火墙放行该端口。例如 Ubuntu 使用 UFW:
1 | ufw allow 44584/tcp |
2. 在面板创建入站和客户端
- 进入 3x-ui 的「入站」页面,创建并启用入站。
- 记下入站端口,例如
44584。 - 在入站中添加客户端,确保客户端未过期、未禁用。
- Docker Compose、云安全组和防火墙都要放行该入站端口。
如果 Clash 测速显示 Timeout,且外网测试该端口返回 Connection refused,优先检查以下三项:
docker-compose.yml是否映射了节点端口。- 入站是否已启用,Xray 是否正常运行。
- 云安全组、UFW 或其他防火墙是否放行 TCP 端口。
服务器上可检查监听状态:
1 | ss -lntp | grep ':44584' |
正常情况下应能看到 Xray 对应的监听记录。
3. 配置 Clash/Mihomo 订阅
进入「面板设置 → 订阅设置」:
- 启用订阅服务。
- 确认订阅端口为
2096。 - 进入「Clash / Mihomo」页,启用 Clash / Mihomo 订阅。
- 客户端复制 Clash/Mihomo 格式的订阅地址。
3x-ui 同一个客户端会提供不同格式的订阅。导入 Clash Verge 时,必须使用 Clash/Mihomo YAML 地址:
1 | http://服务器IP:2096/clash/客户端SubID |
不要使用普通地址:
1 | http://服务器IP:2096/sub/客户端SubID |
/sub/ 返回普通节点订阅,而 Clash Verge 的远程配置需要 YAML,因此会出现:
1 | the remote profile data is invalid yaml |
HTTP 的 IP + 端口订阅可以正常使用;但订阅内容和 Sub ID 会明文传输,实际长期使用建议换成 HTTPS 域名。
4. 由 3x-ui 下发默认分流规则
机场订阅通常会下发“节点 + 代理组 + 路由规则”。3x-ui 也可以在订阅中下发规则:
- 进入「面板设置 → 订阅设置 → Clash / Mihomo」。
- 打开「启用路由」。
- 在「全局路由规则」填入规则。
- 保存后,在 Clash Verge 更新订阅。
这里的规则会被添加到 YAML 订阅开头、默认 MATCH,PROXY 之前。因此最后放入 MATCH,DIRECT,即可实现“指定网站走代理,其余全部直连”。
下面是一份可直接使用的规则:
1 | # OpenAI / ChatGPT / Codex |
PROXY 必须和订阅中的代理组名称一致。使用默认 3x-ui Clash/Mihomo 模板时,通常就是 PROXY。如果你改过代理组名称,请同步修改规则中的目标名称。
5. Clash Verge 使用方式
- 导入
/clash/客户端SubID订阅地址。 - 在「代理」页的
PROXY组中选择自己的节点,不要选DIRECT。 - 顶部模式选择「规则」。
- 更新订阅后,面板配置的全局路由规则会同步到 Clash Verge。
规则按从上到下的顺序匹配:前面的域名走 PROXY,最后的 MATCH,DIRECT 让其余网络走直连。要新增代理网站,只需在 MATCH,DIRECT 前增加一行:
1 | - DOMAIN-SUFFIX,example.com,PROXY |
要强制某个网站直连,同样放在 MATCH,DIRECT 前:
1 | - DOMAIN-SUFFIX,example.com,DIRECT |
6. 最短排错清单
| 现象 | 原因 | 处理 |
|---|---|---|
订阅导入提示 invalid yaml |
使用了 /sub/ |
改用 /clash/客户端SubID |
| Clash 节点测速超时 | 节点端口未映射或未放行 | 在 Compose、云安全组、系统防火墙同时开放入站端口 |
| 面板和订阅能打开,但节点连不上 | 仅映射了 2053、2096 |
追加节点端口,例如 44584:44584 |
| 所有流量都走代理 | 默认规则是 MATCH,PROXY |
启用 Clash/Mihomo 路由并在最后添加 MATCH,DIRECT |
| 指定网站没有走代理 | 规则放在 MATCH,DIRECT 后面,或 PROXY 组未选节点 |
把规则移动到 MATCH,DIRECT 前,并选择节点 |

