Clash 使用 Docker 部署
在一些场景下无法使用 Clash 客户端进行代理,也无法使用软路由,这时候可以由一台服务器运行 Clash,作为其他客户端的代理;同时 Clash 支持以 Docker 容器的方式运行,方便部署和运维
订阅格式转换
机场提供的订阅可能无法被 Clash 直接使用,或者分流配置不合理,需要转换格式;可以使用在线的订阅转换工具,如 https://acl4ssr-sub.github.io/等,也可以使用开源的服务自行搭建;
为了安全和隐私,可以基于 https://github.com/CareyWang/sub-web 和 https://github.com/tindy2013/subconverter 服务搭建,分别是前端和后端服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| version: "3"
services: subweb: image: careywong/subweb container_name: subweb hostname: subweb restart: unless-stopped ports: - 18080:80 environment: - TZ=Asia/Shanghai
subconverter: image: tindy2013/subconverter container_name: subconverter hostname: subconverter restart: unless-stopped ports: - 25500:25500 environment: - TZ=Asia/Shanghai
|
部署完成后,选择进阶模式,填写后端地址为 subconverter 容器的地址;选择远程配置(推荐 Ytoo/NyanCAT,配置更全面),然后填入订阅链接生成即可得到新的订阅链接

如果有自定义配置,可以指定远程配置,参考外部配置,指定 clash_rule_base 配置模板;不过该方式比较麻烦,自己使用可以直接通过更改 subconverter 默认配置的方式实现;
subconverter 默认的配置是 /base/pref.toml文件,其中指定了 clash 的配置文件模板为 clash_rule_base = "base/all_base.tpl",所以修改 base/all_base.tpl 文件即可
为了监控 Clash Premium,需要开启 tracing,所以向配置文件 base/all_base.tpl 中直接加入相关配置:
1 2 3 4 5 6 7
| {% if request.target == "clash" or request.target == "clashr" %} # 以下是新增内容 profile: tracing: true
# ... {% endif %}
|
随后,将该配置文件复制到宿主机上,通过挂载文件的方式添加到 subconverter 容器,避免容器重启后丢失
1 2 3 4 5 6 7
| services: subconverter: image: tindy2013/subconverter
volumes: - ./config/all_base.tpl://base/base/all_base.tpl
|
配置文件
在订阅格式转换完成后,就可以通过生成的订阅链接获取配置,这个配置可以直接使用;如果不满足需求可以基于该配置手动修改,配置内容格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| profile: tracing: true port: 7890 socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule log-level: debug
external-controller: :9090
secret: ""
dns: enable: true
listen: 0.0.0.0:1053 enhanced-mode: fake-ip nameserver: - '114.114.114.114' - '223.5.5.5' fallback: - 'tls://1.1.1.1:853' - 'tcp://1.1.1.1:53' - 'tcp://208.67.222.222:443' - 'tls://dns.google'
proxies: - {name: node1, server: 0.0.0.0, port: 5601, type: ss, cipher: aes-256-gcm, password: 1234, udp: true}
proxy-groups: - { name: '🚀 节点选择', type: select, proxies: ['♻️ 自动选择', '🚀 手动切换', DIRECT] }
rules: - 'DOMAIN-SUFFIX,local,🎯 全球直连' - 'DOMAIN-SUFFIX,localhost,🎯 全球直连' - 'IP-CIDR,10.0.0.0/8,🎯 全球直连,no-resolve'
|
部署
Clash 有两个版本,一个是 clash,一个是 clash-premium,区别在于 premium 是非开源的,支持数据统计,支持 fake-ip 模式(能够减少一次 DNS 查询),支持订阅
yacd 是一个开源的 Clash 控制面板,功能较丰富
1 2 3 4 5 6 7 8 9 10 11 12
| docker run --name clash \ -d \ -v config.yaml:/root/.config/clash/config.yaml \ -p 7890:7890 \ -p 7891:7891 \ -p 9090:9090 \ dreamacro/clash-premium
docker run --name yacd \ -d \ -p 80:80 \ ghcr.io/haishanh/yacd:master
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| version: "3"
services: clash: image: dreamacro/clash-premium container_name: clash hostname: clash restart: unless-stopped ports: - 7890:7890 - 7891:7891 - 9090:9090 volumes: - ./config.yaml:/root/.config/clash/config.yaml environment: - TZ=Asia/Shanghai
yacd: image: ghcr.io/haishanh/yacd:master container_name: yacd hostname: yacd restart: unless-stopped ports: - 80:80 environment: - TZ=Asia/Shanghai depends_on: - clash
|
客户端使用
通过容器方式部署的 Clash 可以以代理的方式使用,在手机/电脑或者应用程序中配置代理即可
命令行
开启代理
1 2 3
| export https_proxy=http://192.168.2.2:7890 export http_proxy=http://192.168.2.2:7890 export all_proxy=socks5://192.168.2.2:7891
|
关闭代理
1 2 3
| unset http_proxy unset https_proxy unset all_proxy
|
系统
在网络-代理中添加配置,指定 HTTP/HTTPS/SOCKS 代理为配置的代理即可
