如何使host.docker.internal在启用自定义dns配置的情况下工作



我让docker compose与几个容器一起运行。其中一个容器是运行bind的dns服务器。在我的docker守护进程配置中,我指定如下的dns:

"dns" : [
"10.1.1.8", /* static ip address of my dockerized bind container defined in compose */
"x.x.x.x", /* my companies internal vpn dns */
"8.8.8.8" /* google dns */
]

这一切都很好。我在compose文件中的容器将使用运行在10.1.1.8上的绑定服务器进行dns查找,然后返回到我公司的内部dns,最后谷歌外部网站的dns。

Docker提供了一个特殊的dns host.Docker.internal,它应该指向主机IP(比如说,你希望Docker容器连接到本地运行的服务,但不连接到Docker上(。我想在一些容器中使用它,这些容器应该允许容器引用主机IP地址,而无需对可能更改的IP进行硬编码。事实上,docker将这个值插入到主机操作系统上的主机文件(windows/system32/driver/etc/host(中,并在主机IP被分配新的dns时更新它。

问题是docker使用dns来解决";host.docker.internal";。当在守护进程中使用我的自定义dns配置时,它会破坏一切,并且我在访问主机操作系统服务时遇到问题。我花了2个小时调试这个问题,直到我意识到host.docker.internal只有在我从守护进程配置中删除dns配置时才开始工作。有没有什么方法可以让docker正确解析dns,并且仍然在同一台机器上使用自定义dns绑定服务器?我可以以某种方式更新守护进程dns以指向某个docker dns ip地址吗?

您是否考虑过依赖Docker Compose以及它如何帮助定义自定义DNS寻址策略。

我为您提供了Compose DNS配置官方指南的链接。

最新更新