我正在VM上部署一个eureka服务器(比如主机外部IP是a.b.c.d)作为docker镜像。尝试两种方式。
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服务器, {{3}}。
为什么在第一种情况下,即使有一个由docker分配的随机端口(32769),eureka服务器也无法从主机外部获得。 是否有必要使用显式端口映射来从外部网络获得docker app?
答案 0 :(得分:0)
由于您正在寻找通过映射端口从外部世界访问主机,因此您需要确保允许源流量到达主机上的端口和给定的协议。我不是网络安全专家,但我建议只是因为你不知道哪个端口码头会选择这个端口而打开一系列端口是一个坏主意。如果可以,我会说选择一个端口并明确映射它并确保防火墙允许从适当的源地址访问该端口,例如:来自ALLOW TCP/8671
的{{1}}作为示例 - 显然您的具体地址范围会因您的网络配置而异。 Docker组合可以帮助您保持这种一致性(与Kubernetes等其他编排技术一样)。此外,如果您使用AWS等云托管服务,您可以利用VPC安全组来帮助您将源流量列入白名单,而无需提前知道所有可能的源IP地址。
答案 1 :(得分:0)
您要么让防火墙阻止此端口,要么阻止您发出请求,对于某些端口,您的传出流量已被禁用,因此您的请求永远不会离开您的计算机。
有些公司这样做。他们为内联网留下了端口80,443和其他几个端口,并禁用所有其他目标端口。