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

2024-01-30

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

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 实例。

谢谢 博

EDIT: 我想让多个节点应用程序在同一端口上运行,但提供不同的主机名。


GitHub 上有一个很棒的 docker 项目,名为nginx 代理 https://github.com/jwilder/nginx-proxy作者:jwilder。 这允许您创建一个通过仅将端口 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 file:

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

关于此服务的重要说明。正如您所注意到的,我添加了--net参数,这是因为您想要成为共享托管一部分的所有容器(代理和网站)必须位于同一虚拟网络上(这可以通过参数定义--net or --network to the docker run命令),尤其是当您使用docker-compose创建泊坞窗,因为docker-compose创建自己的虚拟网络,从而使一个容器无法被另一个容器访问,因此请确保在docker-compose.yml file.

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按主机名端口重定向到 docker 容器 的相关文章

随机推荐