【问题标题】:Access Docker container via DNS name from corporate LAN从企业局域网通过 DNS 名称访问 Docker 容器
【发布时间】:2020-09-02 13:28:13
【问题描述】:

我正在寻找一种通过域名访问在我们公司局域网中的服务器上运行的容器的方法。到目前为止,我只能通过 IP 访问它们

所以设置是。 Docker(适用于 Windows)在服务器 srv1.ourdomain.com(Windows Server 2019)上运行,容器网络配置有 l2bridge 驱动程序,容器的 dns 名称(在运行命令中指定)为 cont1。它可以通过 docker 主机 (srv1) 上的 dns 名称和我机器上的 IP 访问。

如何从位于同一局域网的本地计算机通过 dns 名称 cont1.ourdomain.com 访问容器?

我尝试使用代理 (traefik),但它无法重写内容中的 url,因此在容器内运行的 Web 应用程序失败。因此,我无法在该代理后面托管多个 Web 应用程序。

我知道可以将容器的端口映射到主机端口,然后可以通过主机名和主机端口从局域网访问它,但是我正在运行的应用程序需要映射许多端口(例如 8 个端口每个容器)并且这些容器是短暂的开发人员环境,在运行新容器时要找到一个端口池将是一个地狱。

如果我可以通过 IP 访问容器及其端口,有没有办法通过 DNS 名称来做同样的事情?


UPD1。容器主机是运行在 vmware 上的虚拟服务器。我试图关注那些recommendationsconfigure promiscuous mode。 Thise 对 dns 没有帮助。

UPD2。我也试过transparent 网络。由于某种原因,DHCP 永远无法分配正确的 IP,并且容器最终会使用来自 168.x.x.x 子网的自动配置 IP。

【问题讨论】:

  • 您需要容器的特定端口吗?您可以在企业服务器上添加 nginx,并将 proxypass 流量添加到容器中的公开端口

标签: docker windows-container


【解决方案1】:

您可以创建一个transparent 网络并让容器在网络上像主机一样可被发现。但是,使用主机端口就是recommended

你试过PathStripPathPrefixStripTraefik 吗?这应该可以让您重写后端的 URL。

【讨论】:

  • Transparens 网络似乎与 l2bridge 没有太大区别。我看到的唯一区别是它需要 mac 欺骗,而 bridge 会自动进行 mac 翻译。您确定透明网络将以不同于 l2bridge 的方式与 DNS 一起工作吗?
  • 是的,我尝试了 PathStrip 或 PathPrefixStrip。它不适用于我要在容器内托管的应用程序。 Traefik 仅在请求的 url 中重写 url,而不在响应正文中。因此,即使 traefic 在 domain.com/deeper/path/ 之类的路径上运行,所有指向 css 和脚本的 href 仍然会尝试从根 domain.com/ 加载。
  • 没有反向代理会更改内容或响应正文。您必须更新您的应用程序以使用资产的相对路径。例如,从 /deeper/path 中删除 / 并使用不带主机名或根路径的 deeper/path
  • 我无法更改应用程序,它们是按原样提供给我的。它们确实与 root 相关,并且它们对于资产应该是这样的,因为应用程序本身使用路径用于其他目的,例如切换界面语言 (domain.com/en-eu/app)。在这种情况下,无论如何都应该从 root 下载脚本和 css。所以相对路径不行。所以再次使用适当的 DNS 会救我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2016-09-11
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多