CRYZ

Docker Compose + Clash + Subconverter无法更新订阅的解决方案

当使用Docker Compose运行Clash和subconverter时,Clash配置中使用Docker Compose的服务名称访问subconverter,会遇到无法更新订阅的情况。

查看日志,伴随着subconverter的转换链接,会发现类似下面这种错误信息:

ip not found

该错误是由Clash的DNS服务引起的,关闭DNS服务可以解决此问题。

不关闭Clash DNS服务的解决方案——修改DNS配置

添加fake-ip-filter(当使用fake-ip模式时)

将subconverter服务的hostname添加到fake-ip-filter:

fake-ip-filter:
  - subconverter

添加nameserver

在nameserver中添加Docker embedded DNS server(127.0.0.11):

nameserver:
  - 127.0.0.11

完成以上操作重启Clash服务即可。

为什么会出现这个问题?

Docker Compose创建的容器的默认DNS(Docker embedded DNS server, 127.0.0.11),是一个由Docker Compose管理的DNS服务器,用于映射服务的IP与hostname。当我们启用Clash的DNS服务时,Clash会使用该DNS服务代替容器默认的DNS。因此在Clash启用DNS服务时,默认无法查询到Docker Compose映射的hostname。

Clash DNS的工作流程是向nameserver中配置的所有DNS服务器查询,取第一个得到的结果,但我们配置的其它公共DNS(如1.1.1.1)必然不会正确返回Docker Compose映射的结果,所以需要在nameserver中添加上Docker embedded DNS server,让Clash DNS通过Docker embedded DNS server查询Docker Compose的映射关系。

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注