我可以在端口80上运行两个单独的应用程序,并在Docker Swarm中运行不同的主机名?

随着新的令人兴奋的Docker Swarm在1.12中,似乎很有可能在一个服务器集群中部署多个应用程序。

我正在寻找一种方法来在同一个端口和同一个群集上部署两个单独的应用程序或应用程序入口点。 考虑以下:

web.myservice.com:80 -> Swarm -> Service[web] -> web.1 -> web.2 -> web.3 backend.myservice.com:80 -> Swarm -> Service[backend] -> backend.1 -> backend.2 -> backend.3 

在这种情况下群集只在一个群集的多个主机,暴露端口80.我想你可以暴露不同的端口,并负载均衡器设置为proxy_pass到另一个端口,但我会说,这将是一件好事,有可能只公开主机名:端口在集群,所以如果一个请求进来的主机名和端口它将被转发。 如果你需要多个主机或端口,你可以暴露几个。

这可能是可用的,这就是为什么我问这个问题。 也许它可以复制一些HAProxy或Nginx的高级configuration。 我已经尝试了一些,发现很难使这个可扩展。 如果您有任何意见或build议,请就这个主题提出build议!

– 马库斯

当你发布一个端口时,它绑定到节点的networking接口。 您可以通过使用布局约束来确保这两个服务的任务不在同一个节点上,但是我认为最好有一个nginx服务来为您的stream量进行代理。

Swarm为您的服务创buildDNS条目,以便您可以通过名称轻松访问它们,一个简单的nginx示例是:

 http { ... server { server_name web.myservice.com; location / { proxy_pass http://web:8080; proxy_redirect default; } } server { server_name backend.myservice.com; location / { proxy_pass http://backend:8080; proxy_redirect default; } } }