根据子域将流量路由到docker容器

时间:2014-07-02 09:28:14

标签: docker wildcard-subdomain

我有通配符dns指向我的服务器,例如* .domain.com

我想将每个子域路由到它自己的docker容器。 这样box1.domain.com就会转到相应的docker容器。 这应该适用于主要是HTTP和SSH的任何流量。

或许端口可以是子域的一部分,例如80.box1.domain.com。 我将拥有大量的docker容器,因此解决方案应该是动态的,而不是每个容器的硬编码。

4 个答案:

答案 0 :(得分:6)

我选择interlock使用nginx plugin路由http流量。 我决定为每个SSH连接使用一个随机端口,因为我无法单独使用子域工作。

答案 1 :(得分:2)

另一种解决方案是使用https://github.com/jwilder/nginx-proxy

此工具会自动将请求转发到相应的容器(通过 VIRTUAL_HOST 容器环境变量基于子域)。

例如,如果要将 box1.domain.com 重定向到容器,只需将 VIRTUAL_HOST 容器环境变量设置为& #34;的 box1.domain.com "

以下是我撰写的有关它的详细教程:http://blog.florianlopes.io/host-multiple-websites-on-single-host-docker

答案 2 :(得分:1)

我的回答可能会迟到但是当你使用docker时,你并不需要ssh来连接你的容器。使用docker exec命令,您可以直接在正在运行的容器中运行shell命令。

这是我的建议使用开头列出的nginx proxy容器来配置子域。并在您的主机上运行portainer,以便通过portainer gui直观地了解您的容器,图像,日志,甚至执行命令。

答案 3 :(得分:0)

最简单的解决方案是使用Apache mod_rewrite RewriteMap方法。它在用于文本文件时非常高效,但如果需要,它可以调用脚本。 another StackOverflow answer很好地涵盖了脚本变体。

如果你想避免使用Apache,那么dotCloud的优秀人员就会创建Hipache来为他们的PaaS服务进行路由。他们甚至在构建自己的解决方案之前尝试了documented the different things。我发现tsuru.io的引用完全是使用hipache路由到docker容器,所以这肯定会为此目的验证它。