Nifi 无法以 docker 启动
Nifi cannot startup with docker
我正在尝试将 nifi 与 docker 一起使用,但无济于事。
我有以下 docker-文件
version: "3.7"
services:
nifi_one:
image: apache/nifi
hostname: nifi_one
container_name: nifi_one
environment:
NIFI_WEB_HTTP_HOST: "http://localhost"
NIFI_WEB_HTTP_PORT: "8084"
NIFI_CLUSTER_IS_NODE: "true"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
network_mode: host
volumes:
- ./nifi:/nifi
nifi_two:
image: apache/nifi
hostname: nifi_two
container_name: nifi_two
depends_on:
- nifi_one
environment:
NIFI_WEB_HTTP_HOST: "http://localhost"
NIFI_WEB_HTTP_PORT: "8084"
NIFI_CLUSTER_IS_NODE: "true"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
network_mode: host
volumes:
- ./nifi:/nifi
volumes:
nifi:
我收到以下错误
2020-06-27 15:36:51,540 INFO [main] o.e.j.a.AnnotationConfiguration
Scanning elapsed time=18ms 2020-06-27 15:36:51,542 INFO [main]
o.e.j.server.handler.ContextHandler._ No Spring
WebApplicationInitializer types detected on classpath 2020-06-27
15:36:51,684 INFO [main] o.e.jetty.server.handler.ContextHandler
Started
o.e.j.w.WebAppContext@51b35e4e{nifi-error,/,file:///opt/nifi/nifi-current/work/jetty/nifi-web-error-1.11.4.war/webapp/,AVAILABLE}{./work/nar/framework/nifi-framework-nar-1.11.4.nar-unpacked/NAR-INF/bundled-dependencies/nifi-web-error-1.11.4.war} 2020-06-27 15:36:51,922 WARN [main]
org.apache.nifi.web.server.JettyServer Failed to start web server...
shutting down. java.net.SocketException: Unresolved address at
sun.nio.ch.Net.translateToSocketException(Net.java:131) at
sun.nio.ch.Net.translateException(Net.java:157) at
sun.nio.ch.Net.translateException(Net.java:163) at
sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:87) at
org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
at
org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
at
org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at
org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.server.Server.doStart(Server.java:396) at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:952)
at org.apache.nifi.NiFi.(NiFi.java:158) at
org.apache.nifi.NiFi.(NiFi.java:72) at
org.apache.nifi.NiFi.main(NiFi.java:301) Caused by:
java.nio.channels.UnresolvedAddressException: null at
sun.nio.ch.Net.checkAddress(Net.java:101) at
sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:215)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
... 11 common frames omitted 2020-06-27 15:36:51,923 INFO [Thread-1]
org.apache.nifi.NiFi Initiating shutdown of Jetty web server...
2020-06-27 15:36:51,938 INFO [Thread-1]
o.eclipse.jetty.server.AbstractConnector Stopped
ServerConnector@cb03411{HTTP/1.1,[http/1.1]}{http://localhost:8084}
2020-06-27 15:36:51,938 INFO [Thread-1]
org.eclipse.jetty.server.session node0 Stopped scavenging
有人可以帮我解决这个问题吗?
需要修改三处才能解决问题(如果只修改一处,会抛出其他异常):
- 删除行
NIFI_WEB_HTTP_HOST: "http://localhost"
,因为它在加载网络服务器时抛出异常。
- 行
NIFI_CLUSTER_IS_NODE: "true"
应更改为 NIFI_CLUSTER_IS_NODE: "false"
,因为未定义集群。
- 删除行
network_mode: host
.
进行这些更改后,两个 Nifi 应用程序加载成功。
但是,YAML 文件中还缺少一项定义,这对于将 Nifi 应用程序公开给外部访问至关重要。
添加 ports:
定义可以修复 Nifi 应用程序侦听的外部端口。格式为{外部端口}:{内部端口}。
下面的 YAML 代码创建并加载了两个 Nifi 应用程序。一个暴露在http://localhost:8088/nifi,另一个暴露在http://localhost:8090/nifi.
注意三方共享的共享文件夹的定义:容器的主机,nifi_one,和nifi_two.
完整的定义是:
version: "2.0"
services:
nifi_one:
image: apache/nifi
hostname: nifi_two
container_name: nifi_one
ports:
- 8088:8080 # the internal port 8080 is exposed as 8088
environment:
NIFI_WEB_HTTP_PORT: "8080"
NIFI_CLUSTER_IS_NODE: "false"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
volumes:
- ./nifi-vol:/opt/nifi/nifi-current/temp2
nifi_two:
image: apache/nifi
hostname: nifi_two
container_name: nifi_two
depends_on:
- nifi_one
ports:
- 8090:8081 # setting a unique port to exemplify this feature
environment:
NIFI_WEB_HTTP_PORT: "8081" # the Nifi listens to port 8081 in the container, which is exposed as 8090 externally
NIFI_CLUSTER_IS_NODE: "false"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
volumes:
- ./nifi-vol:/opt/nifi/nifi-current/temp2
volumes:
nifi:
我正在尝试将 nifi 与 docker 一起使用,但无济于事。 我有以下 docker-文件
version: "3.7"
services:
nifi_one:
image: apache/nifi
hostname: nifi_one
container_name: nifi_one
environment:
NIFI_WEB_HTTP_HOST: "http://localhost"
NIFI_WEB_HTTP_PORT: "8084"
NIFI_CLUSTER_IS_NODE: "true"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
network_mode: host
volumes:
- ./nifi:/nifi
nifi_two:
image: apache/nifi
hostname: nifi_two
container_name: nifi_two
depends_on:
- nifi_one
environment:
NIFI_WEB_HTTP_HOST: "http://localhost"
NIFI_WEB_HTTP_PORT: "8084"
NIFI_CLUSTER_IS_NODE: "true"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
network_mode: host
volumes:
- ./nifi:/nifi
volumes:
nifi:
我收到以下错误
2020-06-27 15:36:51,540 INFO [main] o.e.j.a.AnnotationConfiguration Scanning elapsed time=18ms 2020-06-27 15:36:51,542 INFO [main] o.e.j.server.handler.ContextHandler._ No Spring WebApplicationInitializer types detected on classpath 2020-06-27 15:36:51,684 INFO [main] o.e.jetty.server.handler.ContextHandler Started o.e.j.w.WebAppContext@51b35e4e{nifi-error,/,file:///opt/nifi/nifi-current/work/jetty/nifi-web-error-1.11.4.war/webapp/,AVAILABLE}{./work/nar/framework/nifi-framework-nar-1.11.4.nar-unpacked/NAR-INF/bundled-dependencies/nifi-web-error-1.11.4.war} 2020-06-27 15:36:51,922 WARN [main] org.apache.nifi.web.server.JettyServer Failed to start web server... shutting down. java.net.SocketException: Unresolved address at sun.nio.ch.Net.translateToSocketException(Net.java:131) at sun.nio.ch.Net.translateException(Net.java:157) at sun.nio.ch.Net.translateException(Net.java:163) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:87) at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342) at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308) at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.eclipse.jetty.server.Server.doStart(Server.java:396) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:952) at org.apache.nifi.NiFi.(NiFi.java:158) at org.apache.nifi.NiFi.(NiFi.java:72) at org.apache.nifi.NiFi.main(NiFi.java:301) Caused by: java.nio.channels.UnresolvedAddressException: null at sun.nio.ch.Net.checkAddress(Net.java:101) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:215) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85) ... 11 common frames omitted 2020-06-27 15:36:51,923 INFO [Thread-1] org.apache.nifi.NiFi Initiating shutdown of Jetty web server... 2020-06-27 15:36:51,938 INFO [Thread-1] o.eclipse.jetty.server.AbstractConnector Stopped ServerConnector@cb03411{HTTP/1.1,[http/1.1]}{http://localhost:8084} 2020-06-27 15:36:51,938 INFO [Thread-1] org.eclipse.jetty.server.session node0 Stopped scavenging
有人可以帮我解决这个问题吗?
需要修改三处才能解决问题(如果只修改一处,会抛出其他异常):
- 删除行
NIFI_WEB_HTTP_HOST: "http://localhost"
,因为它在加载网络服务器时抛出异常。 - 行
NIFI_CLUSTER_IS_NODE: "true"
应更改为NIFI_CLUSTER_IS_NODE: "false"
,因为未定义集群。 - 删除行
network_mode: host
.
进行这些更改后,两个 Nifi 应用程序加载成功。
但是,YAML 文件中还缺少一项定义,这对于将 Nifi 应用程序公开给外部访问至关重要。
添加 ports:
定义可以修复 Nifi 应用程序侦听的外部端口。格式为{外部端口}:{内部端口}。
下面的 YAML 代码创建并加载了两个 Nifi 应用程序。一个暴露在http://localhost:8088/nifi,另一个暴露在http://localhost:8090/nifi.
注意三方共享的共享文件夹的定义:容器的主机,nifi_one,和nifi_two.
完整的定义是:
version: "2.0"
services:
nifi_one:
image: apache/nifi
hostname: nifi_two
container_name: nifi_one
ports:
- 8088:8080 # the internal port 8080 is exposed as 8088
environment:
NIFI_WEB_HTTP_PORT: "8080"
NIFI_CLUSTER_IS_NODE: "false"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
volumes:
- ./nifi-vol:/opt/nifi/nifi-current/temp2
nifi_two:
image: apache/nifi
hostname: nifi_two
container_name: nifi_two
depends_on:
- nifi_one
ports:
- 8090:8081 # setting a unique port to exemplify this feature
environment:
NIFI_WEB_HTTP_PORT: "8081" # the Nifi listens to port 8081 in the container, which is exposed as 8090 externally
NIFI_CLUSTER_IS_NODE: "false"
NIFI_CLUSTER_NODE_PROTOCOL_PORT: "8085"
NIFI_ZK_CONNECT_STRING: "localhost:2181"
NIFI_ELECTION_MAX_WAIT: "1 min"
volumes:
- ./nifi-vol:/opt/nifi/nifi-current/temp2
volumes:
nifi: