端口重定向到Docker容器(按主机名)

lc8prwob  于 2023-03-17  发布在  Docker
关注(0)|答案(4)|浏览(178)

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

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:我想让多个节点应用程序在同一端口上运行,但使用不同的主机名。

pinkon5k

pinkon5k1#

据我所知,docker没有内置这样的功能,也不应该内置。为了完成你想做的事情,你可能需要一些反向代理,node.js或nginx就可以了。Bouncy可能是一个不错的选择:https://www.npmjs.com/package/bouncy

kiz8lqtg

kiz8lqtg2#

在GitHub上有一个很棒的docker项目,叫做nginx-proxy,它允许你创建一个docker容器,通过只将它的端口80/443Map到主机,而不是其他容器,来做一个反向代理,然后,你所要做的就是为你创建的每个新的web容器提供一个新的环境变量VIRTUAL_HOST=some.domain.com
举个例子:
1.创建新的nginx代理容器

docker run -d -p 80:80 --net shared_hosting -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

1.为每个网站创建一个容器。例如:

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

1.您需要确保您拥有的主机在DNS中配置为指向运行Docker容器的服务器。在本例中,我将添加到/etc/hosts文件中:

echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /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文件中被显式地定义。
希望有帮助。

fwzugrvs

fwzugrvs3#

我使用清漆作为码头集装箱,作为我的反向代理
在码头索引上
https://index.docker.io/u/sysdia/docker-varnish/

hi3rlvi2

hi3rlvi24#

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

相关问题