Docker部署 Clash 代理完整指南
发布时间:2026-10-21 | 浏览:1
一篇文章讲清 mihomo(原 Clash.Meta)的容器化部署全流程:Docker Compose 编排、Web 控制面板、多订阅管理与日常运维。
mihomo 是 Clash 内核的社区继任项目(原名 Clash.Meta)。2023 年 Clash 官方仓库停止公开维护后,mihomo 成为事实上的标准继任者,持续更新并支持更多现代协议:
协议覆盖 :Shadowsocks、VMess、Trojan、Hysteria2、TUIC、VLESS、WireGuard 等;
协议覆盖 :Shadowsocks、VMess、Trojan、Hysteria2、TUIC、VLESS、WireGuard 等;
规则分流 :基于域名、GeoIP、规则集(rule-set)的精细分流;
规则分流 :基于域名、GeoIP、规则集(rule-set)的精细分流;
订阅管理 :支持 proxy-providers 定时自动更新订阅,无需手工替换节点;
订阅管理 :支持 proxy-providers 定时自动更新订阅,无需手工替换节点;
RESTful API :完整的外部控制接口,生态内有丰富的 Web 面板。
RESTful API :完整的外部控制接口,生态内有丰富的 Web 面板。
github地址: MetaCubeX/mihomo
官网地址: 虚空终端 Docs
1.2 为什么使用 Docker 部署
本文采用 内核 + 面板分离 的双容器架构:
mihomo :代理核心,监听 7890(HTTP/SOCKS5 混合代理)与 9090(外部控制器 API);
mihomo :代理核心,监听 7890(HTTP/SOCKS5 混合代理)与 9090(外部控制器 API);
metacubexd :MetaCubeXD 面板,纯静态前端,由浏览器直连内核 API,与内核解耦,可独立升级,甚至可同时管理多个 mihomo 实例。
metacubexd :MetaCubeXD 面板,纯静态前端,由浏览器直连内核 API,与内核解耦,可独立升级,甚至可同时管理多个 mihomo 实例。
二、详细部署教程(Linux / Docker 环境)
已安装 Docker Compose 并启用;
已安装 Docker Compose 并启用;
docker compose version 可正常输出版本号;
docker compose version 可正常输出版本号;
2.3 编写 docker-compose.yml
no / always / on-failure[:次数] / unless-stopped (生产推荐)
Asia/Shanghai (东八区)
修改时需同步调整 config.yaml 的 mixed-port
仅本机使用改 127.0.0.1:9090:9090
⚠️ 容器内路径必须是 /root/.config/mihomo ,与旧版 Clash 不同
2.4 编写 config.yaml
2.5 将编写好的 config.yaml 文件放到 ./data/ 路径下
2.6 安装 MetaCubeXD UI 面板
将解压后的文件夹名字改为 ui 放到 ./data/ 路径下
浏览器打开 http://宿主机IP:9090/ui (本机部署为 http://127.0.0.1:9090/ui );
浏览器打开 http://宿主机IP:9090/ui (本机部署为 http://127.0.0.1:9090/ui );
首次进入填写连接信息: 后端地址 : http://宿主机IP:9090 (注意:是内核 API 地址,不含 /ui ) 密钥(Secret) :config.yaml 中 YOUR_SECRET 的值
后端地址 : http://宿主机IP:9090 (注意:是内核 API 地址,不含 /ui )
后端地址 : http://宿主机IP:9090 (注意:是内核 API 地址,不含 /ui )
密钥(Secret) :config.yaml 中 YOUR_SECRET 的值
密钥(Secret) :config.yaml 中 YOUR_SECRET 的值
连接成功后面板会记住该后端,之后打开直接进入。
连接成功后面板会记住该后端,之后打开直接进入。
实时上下行速率、活动连接数、内存占用、运行模式
查看代理组与节点;点击节点即切换;闪电图标做延迟测速
查看每条连接的来源、目标、命中规则、走的节点;排查"某网站走了哪条线"最直接
实时内核日志,排障时可在设置中切到 debug 级别
切换运行模式(rule/global/direct)、主题、语言、内核版本
切换节点 :代理页 → 点击代理组 → 双击目标节点名;
切换节点 :代理页 → 点击代理组 → 双击目标节点名;
切换模式 :设置页 → Mode → rule (日常推荐)/ global (临时全走代理)/ direct (全直连,用于对照排查);
切换模式 :设置页 → Mode → rule (日常推荐)/ global (临时全走代理)/ direct (全直连,用于对照排查);
测速选节点 :代理页 → 代理组右上闪电图标 → 选延迟最低且非超时的节点;
测速选节点 :代理页 → 代理组右上闪电图标 → 选延迟最低且非超时的节点;
排查分流问题 :访问目标网站 → 连接页找到对应连接 → 查看"规则链"列确认命中的规则与节点。
排查分流问题 :访问目标网站 → 连接页找到对应连接 → 查看"规则链"列确认命中的规则与节点。
3.4 命令行调用 API(可选)
面板本质是对 RESTful API 的可视化封装,也可直接调用:
3.5 为什么面板不需要挂载数据卷
这是一个常见疑问。答案是: 面板容器完全无状态 。
MetaCubeXD 镜像内部只是 Nginx + 静态文件(HTML/JS/CSS),不存储任何服务端数据;
MetaCubeXD 镜像内部只是 Nginx + 静态文件(HTML/JS/CSS),不存储任何服务端数据;
代理数据由浏览器通过 API 直接读写 mihomo 内核,状态在内核侧(已挂载 ./data 卷);
代理数据由浏览器通过 API 直接读写 mihomo 内核,状态在内核侧(已挂载 ./data 卷);
面板自身设置(后端地址、secret、主题)保存在 浏览器 localStorage 中。
面板自身设置(后端地址、secret、主题)保存在 浏览器 localStorage 中。
因此容器删除重建不会丢失任何配置。副作用是:换浏览器或清除浏览器数据后需重新填写后端地址和 secret,属正常现象。
仅当需要深度定制(如自定义 Nginx 配置、HTTPS 证书)时才需要挂卷,常规场景不需要。
mihomo 的 proxy-providers 支持任意数量的订阅并存,是管理多机场订阅的标准做法。
第一步 :每个订阅在 proxy-providers 下声明一个独立键名:
第二步 :在代理组的 use 中逐个列出,节点自动合并:
path 必须互不重复 ——这是订阅的本地缓存文件,同路径会互相覆盖;
path 必须互不重复 ——这是订阅的本地缓存文件,同路径会互相覆盖;
扩展方式 :加一个订阅 = 复制一个 provider 块 + use 列表加一行;
扩展方式 :加一个订阅 = 复制一个 provider 块 + use 列表加一行;
生效方式 : docker restart mihomo ,或在面板设置页重载配置。
生效方式 : docker restart mihomo ,或在面板设置页重载配置。
`exclude-filter: "到期
部分机场校验 UA 才返回节点
配合 url-test 类型的 AUTO 组(见 2.4 节配置),可实现跨订阅的自动选优: tolerance: 50 表示延迟差 50ms 内不切换,避免节点频繁跳动。
必须设置强 secret : secret 为空时控制接口无鉴权,任何人都能读取节点信息并切换代理;
必须设置强 secret : secret 为空时控制接口无鉴权,任何人都能读取节点信息并切换代理;
限制端口暴露 :仅本机使用时,将映射改为 127.0.0.1:9090:9090 与 127.0.0.1:9090:80 ,彻底隔绝外部访问;
限制端口暴露 :仅本机使用时,将映射改为 127.0.0.1:9090:9090 与 127.0.0.1:9090:80 ,彻底隔绝外部访问;
勿将 9090 暴露公网 :如需远程管理,用 SSH 隧道或反向代理 + HTTPS + 访问控制;
勿将 9090 暴露公网 :如需远程管理,用 SSH 隧道或反向代理 + HTTPS + 访问控制;
配置文件保密 :config.yaml 含 secret 与订阅链接,不要提交到公开 Git 仓库;
配置文件保密 :config.yaml 含 secret 与订阅链接,不要提交到公开 Git 仓库;
生产环境锁定镜像版本 : metacubex/mihomo:v1.19.x 而非 latest ,升级前先看 release notes。
生产环境锁定镜像版本 : metacubex/mihomo:v1.19.x 而非 latest ,升级前先看 release notes。
确认 metacubexd ui正常运行;检查浏览器能否访问 9090 端口
后端地址是否为内核 API 地址( http://IP:9090 );secret 是否填写正确;9090 端口映射是否存在
docker logs mihomo 查看内核报错;确认 config.yaml 语法正确(YAML 对缩进敏感)
容器内需能访问订阅链接;部分机场需配置 header 自定义 UA
需 docker restart mihomo 或在面板重载;确认修改的是挂载卷内的 ./data/config.yaml
确认 TZ=Asia/Shanghai 已设置并重建容器
架构 :mihomo 内核 + MetaCubeXD 面板,支持多后端管理;
架构 :mihomo 内核 + MetaCubeXD 面板,支持多后端管理;
配置 :Compose v3.8 规范, unless-stopped 重启策略,Asia/Shanghai 时区,日志轮转;
配置 :Compose v3.8 规范, unless-stopped 重启策略,Asia/Shanghai 时区,日志轮转;
持久化 :仅需为内核挂载 ./data 卷,面板无状态无需挂卷;
持久化 :仅需为内核挂载 ./data 卷,面板无状态无需挂卷;
订阅 :proxy-providers 多订阅并存,独立更新、独立健康检查,配合 url-test 自动选优;
订阅 :proxy-providers 多订阅并存,独立更新、独立健康检查,配合 url-test 自动选优;
安全 :强 secret + 端口绑定 localhost,是本地/局域网场景的最低安全基线。
安全 :强 secret + 端口绑定 localhost,是本地/局域网场景的最低安全基线。
Docker部署 Clash 代理完整指南
本文链接: Docker部署 Clash 代理完整指南
本文包含 AI 辅助内容 ,使用 ChatGPT 参与 资料整理,排版辅助 ,已由作者审核。
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。