NiFi UI从docker-compose启动时无法访问



对于我的生活,我无法访问NiFi Web UI。这让我讨厌安全。


TLDR;我找不到在 docker 容器中启动 NiFi 并仍然访问 UI 的正确方法。这是我尝试过的(8小时):

docker run --name nifi 
-p 8080:8080 
-d 
apache/nifi:latest

我去localhost:8080/nifi- 超时。127.0.0.1也一样.

docker inspect nifi- IP 网关与172.0.0.2的实际 IP172.20.0.1。 分别为Invalid Host Header和超时。

开始随机尝试东西:

# I tried localhost, 0.0.0.0, various IP addresses
docker run --name nifi 
-p 8080:8080 
-e NIFI_WEB_HTTP_HOST=${hostname-here}
-d 
apache/nifi:latest

我还为我的逐渐可能的堆栈构建了一个完整的docker-compose.yml。一切正常,除了:

nifi:
image: apache/nifi:latest
hostname: nifi
depends_on:
- zookeeper
- broker
- schema_registry
- nifi-registry
ports:
- "8080:8080"

没有变化。你可以帮我吗?


更新 1

我使用了下面评论中链接的存储库中的docker-compose.yml文件; 谢谢@Chaffelson。仍在处理localhost超时问题。所以我用码头工人机旋转了一个液滴。

服务启动正常,日志显示 Jetty 服务器已启动 NiFi 注册表和 NiFi。我可以像在本地计算机上一样访问NiFi注册表@<host ip>:18080/nifi-registry

我无法访问<host ip>8080/nifi- 我得到invalid host header回复。

所以我在docker-compose.yml中添加:

environment:
# Tried both with and without quotes
NIFI_WEB_HTTP_HOST: "<host-ip>"

码头服务器无法启动。洞察力?


更新 2

从日志中,仅使用docker run --name nifi -p 8080:8080 -d apache/nifi:1.5.0

[NiFi Web Server-24] o.a.n.w.s.HostHeaderSanitizationCustomizer Request host header [45.55.36.15:8080] different from web hostname [348146fc286f(:8080)]. Overriding to [348146fc286f:8080/nifi]其中45.55.36.15是主机 IP。

这是我问题的症结所在。


更新 3

我在本地计算机上禁用了ufw(防火墙)。我现在可以通过localhost:8080访问 nifi。在远程主机上实际访问没有进展(这是所有这一切的重点)。

很抱歉听到您遇到麻烦。在 Apache NiFi 1.5.0 中,启用了更严格的主机标头保护,以防止主机标头中毒攻击。不幸的是,我们已经看到,对于不熟悉配置的用户来说,这并没有充分记录。作为回应,我们进行了当前master的更改,这些更改将包含在即将发布的 1.6.0 版本中:

  • nifi.properties添加了一个新的属性nifi.web.proxy.host,该属性接受独立于 Jetty 主机名的有效主机标头的逗号分隔列表
  • Docker 配置已更新为允许从 run 命令将代理列入白名单
  • 主机标头保护仅在"安全"NiFi 实例上强制实施。这应该使用户更容易快速部署沙盒环境,就像您在这种情况下所做的那样

为了立即修复,此命令应该有效:

docker run --name nifi 
-p 8080:8080 
-e NIFI_WEB_HTTP_HOST=172.20.0.1
-d 
apache/nifi:latest

您还可以使用 Chrome 扩展程序(如 ModHeader)拦截请求,以覆盖Host标头,并验证它在与预期主机匹配时是否正常工作。除了丹尼尔的出色补充外,这应该对您有所帮助,直到下一个版本发布。

我使用这个和类似的docker compos文件进行自动化的NiFi Python客户端测试。它看起来与你的表面上相似,并且在Ubuntu(Travis-CI)和我当地的MacBook pro上都运行良好。
我建议您尝试将此文件作为已知良好的配置运行,并检查上述"docker logs -f nifi"以查看您的环境是否在启动时抛出错误。

NIFI_WEB_HTTP_HOST 和 NIFI_WEB_HTTP_PORT 的环境变量适用于在 8080 以外的端口上访问 Docker nifi 的情况,这样您就不会获得主机标头阻止程序。我最近为该项目贡献了这些修改,所以如果你遇到问题,我想知道,以便我可以修复它。

我遇到了同样的问题,我无法远程访问 Web UI。原来是防火墙问题。禁用 firewalld 并添加自定义防火墙规则以允许带有端口的 docker 网络应该可以解决问题。

这是我的docker-compose.yml:

在Docker中使用它。它解决了我的问题。

--net=主机

这样 docker 就可以减少内部端口转发路径。