将 Docker 容器代理为子域

标签 proxy docker

我希望将 docker 容器代理为 docker 主机的子域,如下所示。我见过几种可以完成类似任务的解决方案,但没有一个真正适合我们的需要。

主机:运行 RHEL 7.2 的企业 VPS

  • 主机域:host.net(假名 - 但它位于公司 Intranet 后面,无法从公共(public)访问)
  • DNS 服务器:host.net 的 DNS 被委托(delegate)给主机,所以我需要在 :53 上运行一个 dns 服务器(这是新的,这就是为什么还没有设置)
  • 主机IP:172.16.10.12

  • docker :v1.10
  • 子网:dockernet 192.168.222.1/24
  • 子网 dns (docker 创建): dnsmasq on 192.168.122.1:53

  • 目标:
  • 主机上的 dnsmasq 从 172.16.10.12
  • 为 host.net 提供服务
  • 将所有子域 (*.host.net) 代理到子网 dockernet,这样任何加入 dockernet 的容器都可以通过 containername.host.net、containerhostname.host.net、alias1.host.net 等访问。
  • 任何连接到 dockernet
  • 的容器都会自动发生这种情况
  • 将容器视为主机,因此我们不必通过 docker 手动打开端口:例如:rediscontainer.host.net:6379

  • 问题/问题:
  • 无法在主机上启动 dnsmasq,因为 docker 已经绑定(bind)了 192.168.122.1:53 - 我相信我可以将 dnsmasq 配置为不在特定 IP 上监听,但我是新手
  • 什么是相对简单的配置方法?我希望我可以配置 dnsmasq 和 iptables 来做到这一点,但我不确定如何去做,或者这两个是否可以实现我的目标。
  • 我假设 docker 为用户定义的网络内置的 dns 是自动化容器名称解析的最简单方法,但有没有更简单的方法?
    由于我是 dns、子网等的新手,我对任何歧义表示歉意。非常感谢任何帮助!

  • 埃里克

    最佳答案

    我使用 nginx-proxy 为每个容器实现了这样的动态子域.

    This article还解释了如何从 nginx 基础镜像和 dockergen 实现相同的功能,以从 docker 事件生成 nginx conf。

    关于将 Docker 容器代理为子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36184343/

    相关文章:

    html - 是否可以使用 iframe 作为 'proxy' ?

    Java:检查给定的IP和端口是否是代理服务器

    node.js - NodeJs镜像网站代理

    Azure 服务主体从容器注册表中提取镜像

    docker - 在 Docker 中以自定义用户身份运行 ASP.NET Core 应用程序

    mongodb - 无法启动docker mongodb

    azure - 发布管道 - 在 docker 阶段之间共享工件

    internet-explorer - 为 Chrome 设置独立代理设置的解决方法

    nginx - 为什么要使用带有反向代理的 gunicorn?

    python - pycharm "Note that you cannot install any Python packages into Docker-based project interpreters."