【问题标题】:How to forward hostname based request to a specific docker container如何将基于主机名的请求转发到特定的 docker 容器
【发布时间】:2015-05-08 06:12:10
【问题描述】:
我正在尝试使用基于主机名的连接到 docker 容器。即:我将浏览器连接到 web01.docker.example.org(假设 *.docker.example.org 上的通配符 DNS 记录指向我的 docker 框)。例如,如何让 docker 将此请求转发到我的 nginx docker?
这个想法的灵感来自 apache 的 VirtualNameHost 模型,它执行此操作,除了 VirtualHost 而不是正在运行的容器。
【问题讨论】:
标签:
networking
dns
docker
hostname
【解决方案1】:
Docker 本身无法做到这一点,但是有一个非常出色的 project by Jason Wilder 可以使用他自己开发的 docker-gen 实用程序(也可以在他的 Github 帐户上找到)解决了这个问题。您可以使用docker pull jwilder/nginx-proxy 拉取受信任的构建并运行它。然后,您可以非常轻松地启动另一个容器(您想在 web01.docker.example.org 主机名上监听的容器):
docker run -it -h "web01.docker.example.org" myContainer
nginx-proxy 容器会自动检测容器上暴露了哪些端口,并将容器绑定到该端口上的 nginx 后端。这也是如何让多个容器监听一个 IP 地址,但根据主机名路由到多个容器的方法。该项目还支持 SSL 和自定义 vhost.d 配置文件等。我已经使用它很长时间了,没有任何问题,为此强烈推荐它。祝你好运!