我想从一台服务器设置服务多个站点:
1. http://www.example.org => node.js-www (running on port (50000)
2. http://files.example.org => node.js-files (running on port 50001)
直到现在,我才发现在使用静态IPS时让Docker做端口重定向。
实际上是否可以通过主机名使用Docker进行端口重定向?
我使用免费的亚马逊EC2仪器。
谢谢,波
EDIT:我想让多个节点应用程序在同一端口上运行,但使用不同的主机名。
4条答案
按热度按时间pinkon5k1#
据我所知,docker没有内置这样的功能,也不应该内置。为了完成你想做的事情,你可能需要一些反向代理,node.js或nginx就可以了。Bouncy可能是一个不错的选择:https://www.npmjs.com/package/bouncy
kiz8lqtg2#
在GitHub上有一个很棒的docker项目,叫做nginx-proxy,它允许你创建一个docker容器,通过只将它的端口80/443Map到主机,而不是其他容器,来做一个反向代理,然后,你所要做的就是为你创建的每个新的web容器提供一个新的环境变量
VIRTUAL_HOST=some.domain.com
。举个例子:
1.创建新的nginx代理容器
1.为每个网站创建一个容器。例如:
1.您需要确保您拥有的主机在DNS中配置为指向运行Docker容器的服务器。在本例中,我将添加到
/etc/hosts
文件中:1.导航到http://hello1.domain.com,然后导航到http://drupal.domain.com,可以看到它们都使用端口80,但给予的页面不同。
关于这个服务的一个重要提示。正如你所注意到的,我已经添加了
--net
参数,这是因为你想成为共享主机的一部分的所有容器(代理和网站)必须在同一虚拟网络上(这可以通过docker run
命令的参数--net
或--network
来定义),特别是当您使用docker-compose
来创建停靠器时,因为docker-compose
创建了它自己的虚拟网络,从而使得一个container不能被另一个container访问,所以确保网络在docker-compose.yml
文件中被显式地定义。希望有帮助。
fwzugrvs3#
我使用清漆作为码头集装箱,作为我的反向代理
在码头索引上
https://index.docker.io/u/sysdia/docker-varnish/
hi3rlvi24#
我知道这是一个老问题,但我偶然遇到了这个问题,我想指出有更简洁的方法来完成请求的任务。由于您使用的是AWS,因此可以让两个主机名分别指向各自的负载平衡器(ELB)。然后,您可以将容器部署到ECS中,例如,侦听两个端口。每个负载平衡器都可以将流量重定向到适当的侦听端口。现在您已经完成了您想要的任务,如果您的流量变得太重或不平衡,您可以轻松地将任务拆分到两个不同的ECS群集中,以便它们可以独立扩展。