How to fix docker emqx_ctl Node '[email protected]' not responding to pings.
Problem:
When trying to run emqx_ctl
in a dockerized emqx
setup using a command like
docker-compose exec emqx ./bin/emqx status
you see an error message like
Node '[email protected]' not responding to pings.
/opt/emqx/bin/emqx: line 41: die: command not found
Solution
The problem here is that emqx_ctl
is trying to connect to the IP address for node1.emqx.mydomain.com but that IP address does not point to the IP address for the docker container (maybe it’s the public IP address for your server?)
The solution here is to create a network alias within docker
/docker-compose
so that the Docker DNS system resolves node1.emqx.mydomain.com
to the internal IP address of the container.
For example, in docker-compose
, you can create your network using
networks:
emqx:
driver: bridge
and then configure the alias for the container using
services:
emqx:
image: emqx:4.4.4
environment:
- "EMQX_NAME=emqx"
- "EMQX_HOST=node1.emqx.mydomain.com"
- "EMQX_LOADED_PLUGINS=emqx_recon,emqx_retainer,emqx_management,emqx_dashboard"
ports:
- 18083:18083
- 1883:1883
volumes:
- ./emqx_data:/opt/emqx/data
- ./emqx_log:/opt/emqx/log
networks:
emqx:
aliases:
- "node1.emqx.mydomain.com"