# MQTT node doesn't reconnect to MQTT broker after restarting flows

**URL:** <https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444>\
**Category:** Core Development\
**Tags:** docker, mqtt\
**Created:** [7 September 2022 19:00 UTC](https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444 "2022-09-07T19:00:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![janvda](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/janvda/32/234_2.png) [@janvda](https://discourse.nodered.org/u/janvda)\
**Post date:** [7 September 2022 19:00 UTC](https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444/1 "2022-09-07T19:00:18Z")

</div>

**My setup:**

On my intel NUC device with host OS `ubuntu 20.4` I am running docker and in this case I make use of following docker containers:

- MQTT broker (without security) based on docker image `eclipse-mosquitto`
- several node-red containers (based on docker image `nodered/node-red:3.0.2-16`) which connect to the MQTT broker using the core node red MQTT node with below configuration (so no security):  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/d/5d7f86750c9ba161165d11f8bd00321251f19e6b.png)

The problem is that when I restart the Flows using the Node-Red editor for one of my node-red containers then most of the times it is disconnecting from the MQTT broker **but NOT reconnecting.**

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/8/384273295b261592cedd6c4cace915745d6669e5.png)

So when it is working I get following expected log output:

```auto
niamondo-map-1 | 7 Sep 20:41:16 - [warn] Using unencrypted credentials
niamondo-map-1 | 7 Sep 20:41:16 - [info] Stopping flows
niamondo-map-1 | 7 Sep 20:41:16 - [info] Stopped flows
niamondo-map-1 | 7 Sep 20:41:16 - [info] Starting flows
niamondo-map-1 | 7 Sep 20:41:16 - [info] [worldmap:37add1f3.3f5cce] started at /worldmap
niamondo-map-1 | 7 Sep 20:41:16 - [info] Started flows
niamondo-mqtt-1 | 1662576076: Client nodered_d8aaeaa349a742d9 disconnected.
niamondo-mqtt-1 | 1662576076: New connection from 172.19.0.10:45648 on port 1883.
niamondo-mqtt-1 | 1662576076: New client connected from 172.19.0.10:45648 as nodered_4e0ec337db03012d (p2, c1, k60).
niamondo-map-1 | 7 Sep 20:41:16 - [info] [mqtt-broker:mqtt broker] Connected to broker: mqtt://mqtt:1883
niamondo-map-1 | 7 Sep 20:41:16 - [info] [debug:MQTT send map/state] not_initialized
niamondo-qr-scanner-1 | 7 Sep 20:41:16 - [info] [debug:MQTT receive map/state] not_initialized

```

but when I restarted it again 20 seconds later I got following unexpected output:

```auto
niamondo-map-1 | 7 Sep 20:41:31 - [warn] Using unencrypted credentials
niamondo-map-1 | 7 Sep 20:41:31 - [info] Stopping flows
niamondo-map-1 | 7 Sep 20:41:31 - [info] Stopped flows
niamondo-map-1 | 7 Sep 20:41:31 - [info] Starting flows
niamondo-map-1 | 7 Sep 20:41:31 - [info] [worldmap:37add1f3.3f5cce] started at /worldmap
niamondo-map-1 | 7 Sep 20:41:31 - [info] Started flows
niamondo-mqtt-1 | 1662576091: Client nodered_4e0ec337db03012d disconnected.
niamondo-map-1 | 7 Sep 20:41:31 - [info] [mqtt-broker:mqtt broker] Connected to broker: mqtt://mqtt:1883
niamondo-map-1 | 7 Sep 20:41:31 - [info] [debug:MQTT send map/state] not_initialized

```

So you can see in the above log file that my MQTT broker container `niamondo-mqtt-1` is only reporting a disconnect but doesn't report a (client) connection.  
Although the MQTT broker doesn't report a client connection, the node-red container `niamondo-map-1` does report that it has connected to the broker which you can also see in the node-red editor:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/d/2/d298aa5e4a049b099c5cd4f84e5212e60b1b9bf5.png)

I am pretty sure that my node-red container is not properly connected to the broker as it is not receiving any MQTT events that are sent by the other container `niamondo-qr-scanner-1`.

---

<div class="post-metadata">

**Author:** ![janvda](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/janvda/32/234_2.png) [@janvda](https://discourse.nodered.org/u/janvda)\
**Post date:** [7 September 2022 19:36 UTC](https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444/2 "2022-09-07T19:36:39Z")

</div>

I have found the root cause.

The problem is that it is connecting to a different MQTT broker container that is also running on the same Host OS.

I have opened a shell in my node-red container and ran `netstat -a` command.

Normally I should get something like:

```auto
bash-5.1$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State       
tcp 0 0 0.0.0.0:1880 0.0.0.0:* LISTEN      
tcp 0 0 localhost:37205 0.0.0.0:* LISTEN      
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54064 ESTABLISHED 
tcp 0 0 localhost:1880 localhost:58900 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54054 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54062 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54058 TIME_WAIT   
tcp 0 0 localhost:1880 localhost:58890 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54060 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:53612 ESTABLISHED 
tcp 0 0 ac91111b855f:45654 niamondo-mqtt-1.nuc1_default:1883 ESTABLISHED 
udp 0 0 localhost:59880 0.0.0.0:*                           
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
bash-5.1$ 

```

but when the problem happened I saw the following:

```auto
bash-5.1$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State       
tcp 0 0 0.0.0.0:1880 0.0.0.0:* LISTEN      
tcp 0 0 localhost:37205 0.0.0.0:* LISTEN      
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54066 TIME_WAIT   
tcp 0 0 localhost:1880 localhost:58924 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54064 TIME_WAIT   
tcp 0 0 localhost:1880 localhost:58934 TIME_WAIT   
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:53612 ESTABLISHED 
tcp 0 0 ac91111b855f:1880 traefik.nuc1_default:54068 ESTABLISHED 
tcp 0 0 ac91111b855f:48928 nuc1-mqtt-1.nuc1_default:1883 ESTABLISHED 
udp 0 0 localhost:59880 0.0.0.0:*                           
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
bash-5.1$ 

```

So you see that in the second netstat log a connection has been made with

- `nuc1-mqtt-1.nuc1_default:1883`

while in the first netstats a connection has been made with a different host:

- `niamondo-mqtt-1.nuc1_default`

So it appears that after restarting the flows the `mqtt` hostname is suddenly resolved to a different IP address as you see here below:

```auto
bash-5.1$ ping mqtt
PING mqtt (172.19.0.3) 56(84) bytes of data.
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=1 ttl=64 time=0.125 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=2 ttl=64 time=0.120 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=3 ttl=64 time=0.120 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=4 ttl=64 time=0.121 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=5 ttl=64 time=0.122 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=6 ttl=64 time=0.133 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=7 ttl=64 time=0.119 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=8 ttl=64 time=0.118 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=9 ttl=64 time=0.120 ms
^C
--- mqtt ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8165ms
rtt min/avg/max/mdev = 0.118/0.122/0.133/0.004 ms
bash-5.1$ ping mqtt
PING mqtt (172.19.0.15) 56(84) bytes of data.
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=1 ttl=64 time=0.110 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=2 ttl=64 time=0.121 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=3 ttl=64 time=0.081 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=4 ttl=64 time=0.120 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=5 ttl=64 time=0.143 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=6 ttl=64 time=0.194 ms
64 bytes from niamondo-mqtt-1.nuc1_default (172.19.0.15): icmp_seq=7 ttl=64 time=0.180 ms
^C
--- mqtt ping statistics ---

```

**So it is not a node-red problem but a docker problem.**

---

<div class="post-metadata">

**Author:** ![janvda](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/janvda/32/234_2.png) [@janvda](https://discourse.nodered.org/u/janvda)\
**Post date:** [7 September 2022 19:59 UTC](https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444/3 "2022-09-07T19:59:57Z")

</div>

I have fixed it by renaming my `mqtt` docker container into `mqtt-broker` so that it doesn't clash with existing `mqtt` docker container.

So `ping mqtt-broker` will always return the proper IP address which is different from the IP address returned by `ping mqtt` :

```auto
bash-5.1$ ping mqtt-broker
PING mqtt-broker (172.19.0.16) 56(84) bytes of data.
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=1 ttl=64 time=0.211 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=2 ttl=64 time=0.120 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=3 ttl=64 time=0.180 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=4 ttl=64 time=0.194 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=5 ttl=64 time=0.120 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=6 ttl=64 time=0.133 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=7 ttl=64 time=0.121 ms
64 bytes from niamondo-mqtt-broker-1.nuc1_default (172.19.0.16): icmp_seq=8 ttl=64 time=0.120 ms
^C
--- mqtt-broker ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7080ms
rtt min/avg/max/mdev = 0.120/0.149/0.211/0.036 ms
bash-5.1$ ping mqtt
PING mqtt (172.19.0.3) 56(84) bytes of data.
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=1 ttl=64 time=0.316 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=2 ttl=64 time=0.196 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=3 ttl=64 time=0.125 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=4 ttl=64 time=0.196 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=5 ttl=64 time=0.121 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=6 ttl=64 time=0.181 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=7 ttl=64 time=0.133 ms
64 bytes from nuc1-mqtt-1.nuc1_default (172.19.0.3): icmp_seq=8 ttl=64 time=0.178 ms
^C
--- mqtt ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7059ms
rtt min/avg/max/mdev = 0.121/0.180/0.316/0.058 ms
bash-5.1$ 

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [21 September 2022 20:00 UTC](https://discourse.nodered.org/t/mqtt-node-doesnt-reconnect-to-mqtt-broker-after-restarting-flows/67444/4 "2022-09-21T20:00:56Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
