Hi,
Im new to the Docker world . I tried two versions of Docker:
1- Docker on Ubuntu
2- Docker on Windows Desktop.
I know both are different flavors and the windows version has limitations when it comes to certain docker features and capabilities. The problem is our company only uses windows machine (VM & Physical) so getting Ubuntu machine is very difficult if not impossible. What Im trying to do is to deploy an APache Nifi Cluster with external zookeepr using Host Networking. I was able to do so under Ubuntu VM machines that I have installed locally on my desktop using Hyper V application . However I struggled with getting the same result when trying to do it on DockerDesktop after enabling Host Networking feature. I think the problem is mainly due to the fact that dockerdesktop doesnt really bind the IP address of the host machine to the container and when I try to assign Nifi the same IP through the configuration I start getting :
java.net.BindException: Cannot assign requested address
Here how my docker compose look in each node
services:
zoo1:
image: zookeeper:latest
restart: always
hostname: zoo1
extra_hosts:
- "**<host-ip>**=host-gateway"
ports:
- 2181:2181
- 2888:2888
- 3888:3888
- 10000:10000
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=<node1-ip>:2888:3888;2181 server.2=<node2-ip>:2888:3888;2181
ZOO_4LW_COMMANDS_WHITELIST: stat, conf
my_nifi_image:
container_name: my_nifi_container
ports:
- 11443:11443
- 8443:8443
- 6342:6342
- 10443:10443
- 2181:2181
- 2888:2888
- 3888:3888
- 10000:10000
build:
extra_hosts:
- "**<host-ip>**=host-gateway"
context: .
volumes:
- ./cert:/opt/certs
Here is how my DockerFile look like:
FROM apache/nifi:2.0.0-M4
ENV AUTH=ldap
ENV NIFI_WEB_HTTPS_PORT=8443
ENV KEYSTORE_PATH=/opt/certs/keystore.p12
ENV KEYSTORE_TYPE=JKS
ENV KEYSTORE_PASSWORD=...
ENV TRUSTSTORE_PATH=/opt/certs/truststore.p12
ENV TRUSTSTORE_PASSWORD=...
ENV TRUSTSTORE_TYPE=JKS
ENV INITIAL_ADMIN_IDENTITY=...
ENV LDAP_AUTHENTICATION_STRATEGY=SIMPLE
ENV LDAP_MANAGER_DN="..."
ENV LDAP_MANAGER_PASSWORD="..."
ENV LDAP_USER_SEARCH_BASE="..."
ENV LDAP_USER_SEARCH_FILTER="..."
ENV LDAP_IDENTITY_STRATEGY="USE_USERNAME"
ENV LDAP_URL="LDAP://...."
ENV NIFI_CLUSTER_IS_NODE=true
ENV NIFI_CLUSTER_ADDRESS=**<host-ip>**
ENV NIFI_CLUSTER_NODE_PROTOCOL_PORT=11443
ENV NIFI_CLUSTER_NODE_PROTOCOL_MAX_THREADS=50
ENV NIFI_ZK_CONNECT_STRING="**<node1-ip>**:2181,**<node2-ip>**:2181"
ENV NIFI_ELECTION_MAX_WAIT="1 mins"
ENV NIFI_ELECTION_MAX_CANDIDATES=2
ENV NIFI_SENSITIVE_PROPS_KEY=....
ENV NIFI_CLUSTER_LOAD_BALANCE_HOST=**<host-ip>**
COPY ./auth/authorizers.xml /opt/nifi/nifi-current/conf
Is there a way to fix this ?
My goal is to be able to deploy the cluster in docker unix based container and still have access to the network so I can access other servers like local database server , network drives…etc.
I appreciate any help and support on this topci.
Thanks