bod*_*ser 7 dns port redirect 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)
Run Code Online (Sandbox Code Playgroud)
直到现在我才发现docker在使用静态ip时进行端口重定向。
实际上可以使用 docker 通过主机名进行端口重定向吗?
我使用免费的亚马逊 EC2 实例。
谢谢博
编辑:我想让多个节点应用程序在同一端口上运行,但提供不同的主机名。
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
Run Code Online (Sandbox Code Playgroud)为每个网站创建一个容器。例如:
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
Run Code Online (Sandbox Code Playgroud)您需要确保您拥有的主机在 DNS 中配置为指向运行 docker 容器的服务器。在此示例中,我将添加到文件中/etc/hosts:
echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /etc/hosts
Run Code Online (Sandbox Code Playgroud)导航到http://hello1.domain.com,然后访问http://drupal.domain.com,您会发现它们都使用端口 80,但给您提供了不同的页面。
关于此服务的重要说明。正如您所注意到的,我添加了--net参数,这是因为您想要成为共享托管一部分的所有容器(代理和网站)必须位于同一虚拟网络上(这可以由参数或命令--net定义--network)docker run,特别是当您使用docker-compose创建docker时,因为docker-compose创建了自己的虚拟网络,从而使一个容器无法被另一个容器访问,因此请确保在文件中明确定义网络docker-compose.yml。
希望能帮助到你。
据我所知,docker 没有内置这样的功能,也不应该内置这样的功能。为了完成你想要做的事情,你可能需要某种反向代理,所以node.js或nginx就可以了。Bouncy 可能是一个不错的选择:https ://www.npmjs.com/package/bouncy