前言
我的 Rails 应用程序关心主机名。因此,例如,当请求来自时,domain-a.dev
它的行为与请求来自时不同domain-b.dev
。我想测试此行为,因此已将完整的*.dev
TLD 路由到127.0.0.1
我的本地计算机上,因此我可以将测试中的服务器域设置为我想要的,但它始终使用我的本地计算机测试服务器。
这是必要的,因为我的测试使用selenium
,它启动外部浏览器并浏览到domain-a.dev
or domain-b.dev
。所以我不能request.hostname
在我的测试中简单地覆盖(左右),因为这对外部浏览器没有影响。
现在我想使用 docker 镜像进行测试,因此我不必在多台服务器上配置测试环境,只需启动 docker 镜像即可。到目前为止一切正常,但正在*.dev
解决。
AFAIK Docker 默认使用主机名称服务器或谷歌名称服务器(https://docs.docker.com/articles/networking/#dns),但这意味着更改主机的 dns 以实现我不想要的目标。
我想构建一个 docker 映像,其中一个特殊的 TLD,例如dev
,总是路由到127.0.0.1
,而不接触 docker host。
这意味着对于运行此 docker 映像的每个人,例如domain.dev
将被解析到127.0.0.1
容器内部。(不仅是domain.dev
,而且是每个*.dev
域。)。其他 TLD 应该照常工作。
我的一个想法是dnsmasq
在容器内开始,配置为解析并将其余部分转发到通常的名称服务器*.dev
。127.0.0.1
但我是 docker 新手,不知道这是否太复杂或如何完成。
另一个想法可能是/etc/hosts
用特殊域的固定条目覆盖容器。但这意味着我必须更新 docker 容器,以防我想将新域解析为127.0.0.1
,如果域经常更改,这是一个缺点。
码头专家怎么说?