【问题标题】:Why can't I access open HTTP port of NiFi flow via Docker?为什么我无法通过 Docker 访问 NiFi 流的开放 HTTP 端口?
【发布时间】:2019-02-08 20:42:05
【问题描述】:

我正在尝试做一些非常简单的事情:使用官方 NiFi docker 镜像 (https://hub.docker.com/r/apache/nifi/) 运行一个非常简单的 NiFi“Hello World”教程 (https://github.com/drnice/NifiHelloWorld)。

问题是我无法从该教程(称为 Nifi-WebServer-HandleHTTP)访问 HandleHttpRequest 处理器的端口。端口是 6688。

我已将端口 6688 映射到 localhost,我已在 portainer 中确认了这一点: Portainer Snapshot Showing port mappings

URL localhost:8080 工作正常,我可以访问 NiFi UI 并与之交互。

但是当我尝试 localhost:6688 时,我得到一个错误(来自服务器的空响应)。

更多信息

1) 当我通过 Portainer 登录到“nifi3”容器控制台时,我可以运行“curl localhost:6688”,并得到预期的结果(返回一些 HTML)。

2) 我已通过 netstat 确认我的主机上没有其他任何东西在使用 6688。

3) 全容器运行命令:

docker run --name nifi4 -d -p 8080:8080 -p 6688:6688 -p 9998:9998 -v `C:/temp/GitHub/NifiHelloWorld/Archive`:/mnt/nifi_hello_world -v C:/temp/nifi_out:/mnt/nifi_out nifi3 -v 4a8bd6cab08f08af457001810a312816757f40a7c16d2583dd6a9eabfd76db78:/opt/nifi/nifi-current/conf

所以 HTTP 服务器似乎在容器内的正确端口上运行,端口映射在那里,但我无法从外部访问它。

有人知道为什么吗?

【问题讨论】:

  • 我不明白stackoverflow.com/a/43244765/348975,但它回答了你的问题吗?
  • @emory 我确实使用 -p 6688:6688 发布了端口。我将编辑问题以包含它。我会尝试 -p 0.0.0.0:6688:6688 方法,但我不确定为什么需要它,因为端口 8080 没有 IP 地址也能正常工作。
  • @emory 实际上看起来它们是等价的:link to clarification
  • 我也不知道为什么需要0.0.0.0,但你是明智的尝试。你能试试docker network create test_it && docker network connect --alias mycontainer testit nifi4之类的东西吗?然后从另一个也连接到 test_it 网络的容器中查看是否可以访问 nifi。我不知道为什么它会起作用而端口转发不起作用,但这是我接下来要尝试的。
  • @emory 也不适用于其他容器,因为 NiFi 处理器本身的“localhost”绑定(请参阅接受的答案)。非常感谢您的回复,我了解了如何在 docker 中创建网络并为它们分配容器!

标签: docker http apache-nifi


【解决方案1】:

您似乎受到了一些容器启动的影响。您使用的模板为“localhost”的 HandleHttpRequest 处理器指定了主机名。因此,它将只接受容器实例内部环回接口上的请求。

您需要从模板实例中删除它,以便它可以绑定到所有接口并允许端口转发通过 docker 命令参数按预期工作。

【讨论】:

  • 如此简单,一旦你知道了 :) 谢谢!
  • 当然!这些该死的电脑总是按照我们说的做:)
猜你喜欢
  • 2018-01-17
  • 2018-11-13
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多