将域转发到docker容器

将域转发到docker容器,docker,dns,routing,Docker,Dns,Routing,我想将请求(通过域名)从公共IP转发到docker容器。 我的网络如下所示: 它应该是这样工作的: first.com      ->   “第一”集装箱,      172.17.0.2/16 mail.first.com ->   “第一邮件”容器, 172.17.0.3/16 第二网站  ->   "第二个"货柜,,  172.17.0.4/16 但我只对转运港口有经验。我想我需要一个有条件的转发依赖于来自互联网请求的域名信息。 类似于路由器的内容: if(request.DomainN

我想将请求(通过域名)从公共IP转发到docker容器。 我的网络如下所示:

它应该是这样工作的:
first.com      ->   “第一”集装箱,      172.17.0.2/16
mail.first.com ->   “第一邮件”容器, 172.17.0.3/16
第二网站  ->   "第二个"货柜,,  172.17.0.4/16

但我只对转运港口有经验。我想我需要一个有条件的转发依赖于来自互联网请求的域名信息。 类似于路由器的内容:

if(request.DomainName == "*.first.com" ||
   request.DomainName == "*.second.com"
{
    forward(request, "10.0.0.10");
}
对于“Docker主机”机器也是如此


但我找不到任何这种转发的例子。我是否误解了它应该是什么样子?

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

还有一个很好的解决方案——基于docker的全自动nginx代理。看看docker compose示例:在运行jwilder的容器之后,您只需添加

虚拟主机=first.com


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

您可以按照以下设置使用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>

代理主机
ProxyPass/http://172.17.0.2/
ProxyPassReverse/http://172.17.0.2/
ServerName first.com
代理主机
ProxyPass/http://172.17.0.3/
ProxyPassReverse/http://172.17.0.3/
ServerName mail.first.com
但这不是正确的方式。您必须阅读以下链接