docker - 使用自动端口映射时,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 会选择哪个端口而开放整个端口范围是个坏主意。如果可以的话,我会说选择一个端口并明确映射它并确保防火墙允许从适当的源地址访问该端口,例如ALLOW TCP/8671
从10.0.1.2/32
例如 - 显然您的特定地址范围会因您的网络配置而异。Docker compose 可以帮助您保持这种一致性(就像 Kubernetes 等其他编排技术一样)。此外,如果您使用 AWS 等云托管服务,则可以利用 VPC 安全组帮助您将流向端口的源流量列入白名单,而无需提前知道所有可能的源 IP 地址。
推荐阅读
- android - 在 gradle android build 中使用 progaurd 生成 jar 文件
- c++ - 如何正确绑定成员函数与 boost::bind
- r - R:sapply 中的父赋值运算符
- node.js - 用于查询索引数据并按日期过滤的 Mongosastic 查询
- c - 使用函数时的异常堆栈条目
- hadoop - 在镶木地板文件上创建外部表时,BIGSQL 中的列顺序是否重要
- php - 带有自定义值的 Paypal 结帐表单
- python-3.x - 从 pandastable 获取索引号
- elasticsearch - 带有查找表的 Elasticsearch 查询
- javascript - FirebaseError browserErrorMessage:“无法注册 ServiceWorker:ServiceWorker 脚本评估失败”