我想转发请求(通过域名)从公共IP 到 docker容器。 我的网络看起来像这样:
它应该是这样的:
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主机"同样的机器。
但我无法找到此转发的任何示例。我误解了应该怎么做?
答案 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>
但这不是正确的方法。您必须阅读以下链接
答案 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端口转发到主机。