Redirect 按主机名将端口重定向到docker容器

Redirect 按主机名将端口重定向到docker容器,redirect,dns,port,hostname,docker,Redirect,Dns,Port,Hostname,Docker,我想设置从一台服务器为多个站点提供服务: 1. http://www.example.org => node.js-www (running on port (50000) 2. http://files.example.org => node.js-files (running on port 50001) 直到现在我才发现docker在使用静态IP时进行端口重定向 是否可以通过主机名使用docker进行端口重定向 我使用免费的亚马逊EC2疯狂版。 谢谢 博 编辑: 我希望多个节

我想设置从一台服务器为多个站点提供服务:

1. http://www.example.org => node.js-www (running on port (50000)
2. http://files.example.org => node.js-files (running on port 50001)
直到现在我才发现docker在使用静态IP时进行端口重定向

是否可以通过主机名使用docker进行端口重定向

我使用免费的亚马逊EC2疯狂版。

谢谢 博

编辑
我希望多个节点应用程序在同一端口上运行,但提供不同的主机名。

据我所知,docker没有内置此类功能,也不应该内置此类功能。
要完成您想要做的事情,您可能需要某种反向代理,node.js或nginx也可以。Bouncy可能是一个不错的选择:

我使用varnish作为docker容器,作为我的反向代理

它在docker索引上


GitHub上有一个很棒的docker项目,jwilder称之为。 这允许您通过仅将其端口80/443映射到主机(而不是其他容器)来创建正在执行反向代理的docker容器。然后,您所要做的就是为您创建的每个新web容器提供一个新的环境变量
VIRTUAL\u HOST=some.domain.com

例如:

  • 创建新的nginx代理容器

    docker run -d -p 80:80 --net shared_hosting -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
    
  • 为每个网站创建一个容器。例如:

    docker run -d -p 80 --net shared_hosting -e VIRTUAL_HOST=hello1.domain.com tutum/hello-world
    docker run -d -p 80 --net shared_hosting -e VIRTUAL_HOST=drupal.domain.com drupal
    
  • 您需要确保在DNS中配置的主机指向运行docker容器的服务器。在本例中,我将向
    /etc/hosts
    文件中添加:

    echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /etc/hosts
    
  • 导航到,然后导航到,并查看它们都使用端口80,但为您提供不同的页面

  • 有关此服务的重要说明。正如您所注意到的,我添加了
    --net
    参数,这是因为您希望成为共享主机(代理和网站)一部分的所有容器必须位于同一虚拟网络上(这可以通过
    docker run
    命令的
    --net
    --network
    参数来定义),特别是当您使用
    docker compose
    创建docker时,因为
    docker compose
    创建了自己的虚拟网络,从而使一个容器无法被另一个容器访问,因此请确保在
    docker compose.yml
    文件中明确定义了网络


    希望能有所帮助。

    我知道这是一个老问题,但我无意中遇到了它,我想指出,有很多更干净的方法来完成要求的任务。由于您使用的是AWS,您可以让两个主机名中的每一个都指向路由53中各自的负载平衡器(ELB)。然后,您可以将容器部署到ECS中,例如,监听两个端口。每个负载平衡器都可以将流量重定向到适当的侦听端口。现在你已经完成了你想要的,如果你的流量变得太大或不平衡,你可以很容易地将任务分成两个不同的ECS集群,以便它们可以独立扩展

    你能描述一下你想做什么吗?我的想象力变得疯狂,不知道如何回答。在这一点上,我会说这是一个DNS配置的事情——只是一个猜测。@EricPlaton见updateThank你。这将假定Docker可以基于主机名隔离流量。嗯,我很感兴趣,但我更愿意将其委托给Apache虚拟主机或Nginx服务器。想想和Docker的关系。。。现在很抱歉。看看负载平衡器并不便宜。使用DNS的本地选项只有在试图保持成本极低时才有意义。