将域转发到docker容器

时间:2017-06-24 22:12:49

标签: docker dns routing

我想转发请求(通过域名)从公共IP docker容器。 我的网络看起来像这样: Scheme of the network.

它应该是这样的:
first.com - > "第一"容器,172.17.0.2/16
mail.first.com - > "第一电子邮件与#34;容器,172.17.0.3/16
second.com - > "第二"容器,172.17.0.4 / 16

但我只有转发端口的经验。我想我需要一个条件转发依赖于来自互联网请求的域名信息。 对于路由器来说是这样的:

if(request.DomainName == "*.first.com" ||
   request.DomainName == "*.second.com"
{
    forward(request, "10.0.0.10");
}

对于" Docker主机"同样的机器。

但我无法找到此转发的任何示例。我误解了应该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以按照以下设置使用apache conf文件。

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://172.17.0.2/
        ProxyPassReverse / http://172.17.0.2/
        ServerName first.com
</VirtualHost>


<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://172.17.0.3/
        ProxyPassReverse / http://172.17.0.3/
        ServerName mail.first.com
</VirtualHost>

但这不是正确的方法。您必须阅读以下链接

https://docs.docker.com/v17.12/datacenter/ucp/2.2/guides/user/services/use-domain-names-to-access-services/#add-a-dns-entry

答案 1 :(得分:-1)

如果我们谈论域名 - 我们主要讨论的是http \ https协议转发,但Docker(docker-proxy service) - 是关于处理较低级别的协议 - TCP \ UDP。这意味着 - 我们需要设置http \ https代理,这将代理我们对容器的请求。

并且有一个很好的解决方案 - jwilder's Nginx-Proxy - 完全自动化的基于docker的nginx-proxy。看看docker-compose示例:运行jwilder的容器之后,你只需要添加

  

VIRTUAL_HOST = first.com

到第一个容器的环境变量并删除http \ https端口转发到主机。