![](/img/trans.png)
[英]Apache redirect to different port for docker container ( Redmine )
[英]port redirect to docker containers by hostname
我想从一台服务器设置为多个站点提供服务:
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 实例。
谢谢博
编辑:我想让多个节点应用程序在同一个端口上运行,但服务于不同的主机名。
据我所知 docker 没有内置这样的功能,也不应该。 要完成您想要做的事情,您可能需要某种反向代理,因此 node.js 或 nginx 可以。 Bouncy 可能是一个不错的选择: https : //github.com/substack/bouncy
GitHub 上有一个很棒的 docker 项目,jwilder 称为nginx-proxy 。 这允许您通过仅将其端口 80/443 映射到主机而不是其他容器来创建一个执行反向代理的 docker 容器。 然后,您所要做的就是为您创建的每个新 Web 容器提供一个新的环境变量VIRTUAL_HOST=some.domain.com
。
一个例子:
创建一个新的 nginx-proxy 容器
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
导航到http://hello1.domain.com ,然后导航到http://drupal.domain.com ,看到它们都使用端口 80 但为您提供不同的页面。
关于此服务的重要说明。 正如您所注意到的,我添加了--net
参数,这是因为您希望成为共享主机(代理和网站)一部分的所有容器都必须位于同一个虚拟网络上(这可以由参数--net
定义)或--network
到--network
docker run
命令),尤其是当您使用docker-compose
创建 docker 时,因为docker-compose
创建了自己的虚拟网络,从而使另一个容器无法访问,因此请确保网络明确定义在docker-compose.yml
文件。
希望能帮助到你。
我知道这是一个老问题,但遇到了它并想指出有更清洁的方法来执行请求。 由于您使用的是 AWS,因此您可以让两个主机名中的每一个都指向 Route53 中各自的负载均衡器 (ELB)。 然后,您可以将容器部署到 ECS,例如,侦听两个端口。 这些负载均衡器中的每一个都可以将流量重定向到适当的侦听端口。 现在你已经完成了你想要的,如果你的流量变得太重或不平衡,你可以轻松地将任务拆分为两个不同的 ECS 集群,以便它们可以独立扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.