通过 FQDN 访问 docker 容器

通过 FQDN 访问 docker 容器

我有几个运行 Web 应用程序的 Docker 容器。可以使用主机的 IP 和我在容器中绑定的端口号在我的网络上访问它们。

我希望能够通过 fqdn 访问应用程序,例如 app1.home.com(或者 home.com/app1,如果这样更简单)。

为了实现这一点,我想我需要在我的网络上运行一个 dhcp 和 dns 服务器。我计划配置 dnsmasq。这将允许我在本地解析 home.com 域。

然后我认为我需要某种代理来路由到特定端口。我知道这可以通过 nginx 或 apache 实现,但我不知道怎么做,而且这似乎有点过头了。我认为 HAProxy 可能是一种选择,但我还是不知道怎么做。

TL;DR:如何使用家庭网络上的 fqdn 来寻址在 docker 容器中运行的 web 应用程序?

答案1

只需将您的 docker 主机配置为具有多个 ip,每个主机名对应一个。然后配置 dnsmasq 以将每个 ip 指向不同的主机名,site1.home.com->XXXX,site2.home.com->YYYY 所有这些 ip 都将属于您的 docker 主机。

然后在 docker 主机上启动容器。我使用带有覆盖网络的 docker swarm,前端是 nginx 反向代理。我将 docker 容器设置为属于此覆盖网络,并为它们指定 --names,以便 docker 覆盖网络拥有自己的 dns,供 nginx 反向代理用于指向其他容器。

然后,我配置 nginx,使其使用基于 swarm 的 dns(取决于用于连接 docker 主机的 ip)指向其他容器。因此,http://XXXX/ 被 nginx 转换为指向覆盖网络上的 dns 名称 site1。nginx 将获取 site1 容器的网页并将其返回给用户。这有点矫枉过正,但其巨大的优势在于,由于滚动更新,它可以冗余地执行此操作,并且停机时间很少。

例如:我在浏览器中访问 home1.home.com。这会触发 DNS 查找,将 home1.home.com 更改为 XXXX 我被定向到 docker 主机的 nginx 反向代理,该代理根据我用于连接 docker 主机的 ip 获取托管在内部覆盖网络上的 site1 网页。然后它将网页呈现给我。

相关内容