Cómo solucionar el error de docker emqx_ctl Node 'emqx@node1.emqx.mydomain.com' not responding to pings.

Problema:

Al intentar ejecutar emqx_ctl en una configuración dockerizada de emqx usando un comando como

emqx_docker_status.sh
docker-compose exec emqx ./bin/emqx status

ves un mensaje de error como

emqx_node_not_responding.txt
Node 'emqx@node1.emqx.mydomain.com' not responding to pings.
/opt/emqx/bin/emqx: line 41: die: command not found

Solución

El problema aquí es que emqx_ctl está intentando conectar a la dirección IP para node1.emqx.mydomain.com pero esa dirección IP no apunta a la dirección IP del contenedor docker (¿quizás es la dirección IP pública de tu servidor?)

La solución aquí es crear un alias de red dentro de docker/docker-compose para que el sistema DNS de Docker resuelva node1.emqx.mydomain.com a la dirección IP interna del contenedor.

Por ejemplo, en docker-compose, puedes crear tu red usando

docker_networks_emqx.yml
networks:
  emqx:
    driver: bridge

y luego configurar el alias para el contenedor usando

docker_compose_emqx_service.yml
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"

Echa un vistazo a artículos similares por categoría: Contenedores Docker EMQX MQTT