【问题标题】:Docker app not available with host IP when using automatic port mapping使用自动端口映射时,Docker 应用程序不适用于主机 IP
【发布时间】:2018-11-20 10:11:38
【问题描述】:

我在 VM 上部署一个 eureka 服务器(比如主机外部 IP 是 a.b.c.d)作为 docker 映像。尝试通过 2 种方式。

1.我在没有明确端口映射的情况下运行 docker 镜像:docker run -p 8671 test/eureka-server 然后运行 ​​docker ps 命令显示端口映射为:0.0.0.0:32769->8761/tcp 尝试使用 http://a.b.c.d:32769 从 VM 外部访问 eureka 服务器,它不可用。

2.我正在运行带有显式端口映射的 docker 映像:docker run -p 8761:8761 test/eureka-server 然后运行 ​​docker ps 命令显示端口映射为:0.0.0.0:8761->8761/tcp 尝试使用 http://a.b.c.d:8761 从 VM 外部访问 eureka 服务器,它可用。

为什么在第一种情况下,即使 docker 分配了随机端口(32769),eureka 服务器也无法从主机外部使用。 是否需要明确的端口映射才能使 docker 应用程序可从外部网络使用?

【问题讨论】:

  • 我的第一个问题是,您确定tcp/32769 在您可能拥有的任何防火墙上都对外界开放。您可以尝试显式映射该端口docker run -p 32769:8761 test/eureka-server 并尝试访问它吗?
  • 谢谢。 ..看起来这可能是问题所在。即使显式映射端口 32769:8671,它也不可用。在这种情况下,docker 的动态端口映射只能用于我们知道暴露给外部世界的一系列端口?

标签: docker


【解决方案1】:

由于您正在寻找通过映射端口从外部世界访问主机的权限,因此您需要确保允许源流量到达主机上的该端口和给定的协议。我不是网络安全专家,但我建议仅仅因为您不知道 docker 会选择哪个端口而开放整个端口范围是个坏主意。如果可以的话,我会说选择一个端口并明确映射它并确保防火墙允许从适当的源地址访问该端口,例如以10.0.1.2/32 中的ALLOW TCP/8671 为例——显然,您的具体地址范围会因您的网络配置而异。 Docker compose 可以帮助您保持这种一致性(就像 Kubernetes 等其他编排技术一样)。此外,如果您使用 AWS 等云托管服务,您可以利用 VPC 安全组帮助您将流向端口的源流量列入白名单,而无需提前知道所有可能的源 IP 地址。

【讨论】:

    【解决方案2】:

    您要么让防火墙阻止此端口,要么从您发出请求的任何地方,对于某些端口,您的传出流量被禁用,因此您的请求永远不会离开您的计算机。

    有些公司这样做。他们将 80、443 等端口留给他们的 Intranet,并禁用所有其他目标端口。

    【讨论】:

      猜你喜欢
      • 2022-11-28
      • 2019-04-10
      • 2020-02-29
      • 1970-01-01
      • 2018-01-17
      • 2014-10-06
      • 2014-09-01
      • 2019-09-25
      • 2017-12-08
      相关资源
      最近更新 更多