端口通过主机名重定向到docker容器

时间:2014-02-05 06:40:34

标签: 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)

直到现在,我才发现在使用静态ips时,docker正在进行端口重定向。

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

我使用免费的亚马逊EC2奖励。

由于 博

修改: 我想让多个节点应用程序在同一个端口上运行,但是服务于不同的主机名。

4 个答案:

答案 0 :(得分:3)

据我所知,docker没有内置的功能,也不应该。 要完成你想要做的事情,你可能需要某种反向代理,所以node.js或nginx会这样做。有弹性可能是个不错的选择:https://github.com/substack/bouncy

答案 1 :(得分:0)

我使用varnish作为我的反向代理

的docker容器

它在docker index

https://index.docker.io/u/sysdia/docker-varnish/

答案 2 :(得分:0)

jwilder在GitHub上有一个名为nginx-proxy的伟大的docker项目。 这允许您通过仅将其端口80/443映射到主机而不是其他容器来创建正在执行反向代理的docker容器。然后,您所要做的就是为您创建的每个新Web容器提供一个新的环境变量VIRTUAL_HOST=some.domain.com

一个例子:

  1. 创建一个新的nginx-proxy容器

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

    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
    
  3. 您需要确保您拥有的主机在DNS中配置为指向运行docker容器的服务器。在此示例中,我将添加到/etc/hosts文件:

    echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /etc/hosts
    
  4. 导航至http://hello1.domain.com,然后导航至http://drupal.domain.com,并看到他们都使用端口80,但会为您提供不同的页面。

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

    希望它有所帮助。

答案 3 :(得分:0)

我知道这是一个古老的问题,但是遇到了这个问题,我想指出,有很多更清洁的方法可以执行要求的操作。由于您使用的是AWS,因此可以在Route53中让两个主机名中的每个主机名指向它们自己的负载均衡器(ELB)。然后,您可以将容器部署到ECS中,例如,在两个端口上侦听。每个负载均衡器都可以将流量重定向到适当的侦听端口。现在,您已经完成了所需的工作,并且如果您的流量变得过大或不平衡,您可以轻松地将任务分为两个不同的ECS群集,以便它们可以独立扩展。