首页 > 解决方案 > 使用自动端口映射时,Docker 应用程序不适用于主机 IP

问题描述

我在 VM 上部署一个 eureka 服务器(比如主机外部 IP 是 abcd)作为 docker 映像。以两种方式尝试。

1.我在没有明确端口映射的情况下运行 docker 映像:docker run -p 8671 test/eureka-server 然后运行 ​​docker ps 命令显示端口映射为: 0.0.0.0: 32769- >8761/tcp 尝试从在带有http://abcd:32769的 VM 之外,它不可用。

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

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

标签: docker

解决方案


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


推荐阅读