0

前言

我的 Rails 应用程序关心主机名。因此,例如,当请求来自时,domain-a.dev它的行为与请求来自时不同domain-b.dev。我想测试此行为,因此已将完整的*.devTLD 路由到127.0.0.1我的本地计算机上,因此我可以将测试中的服务器域设置为我想要的,但它始终使用我的本地计算机测试服务器。

这是必要的,因为我的测试使用selenium,它启动外部浏览器并浏览到domain-a.devor 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在容器内开始,配置为解析并将其余部分转发到通常的名称服务器*.dev127.0.0.1但我是 docker 新手,不知道这是否太复杂或如何完成。

另一个想法可能是/etc/hosts用特殊域的固定条目覆盖容器。但这意味着我必须更新 docker 容器,以防我想将新域解析为127.0.0.1,如果域经常更改,这是一个缺点。

码头专家怎么说?

4

2 回答 2

1

如果您docker run用于启动容器,则您有--add-host=""参数,该参数采用主机名和 IP 写入容器的/etc/hosts.

您的启动命令如下所示:

docker run -d --add-host="domain-a.dev:192.168.0.10" [...]

替换192.168.0.10为您计算机的本地 IP 地址。

不要使用127.0.0.1,因为 Docker 会将其解析为容器而不是您的计算机。

于 2017-01-12T17:05:24.010 回答
-1

我现在基本上通过使用http://xip.io/解决了这个问题

通过使用 url,sub.127.0.0.1.xip.io我可以连接到我的本地机器。我的应用程序只需要知道它127.0.0.1.xip.io被视为“顶级域”,并且sub是没有 tld 的域名。(例如,在 Ruby on Rails 应用程序中,这可以通过调整来完成config.action_dispatch.tld_length = 6)。

于 2016-02-07T16:12:03.040 回答