Como corrigir docker emqx_ctl Node 'emqx@node1.emqx.mydomain.com' not responding to pings.

Problema:

Ao tentar executar emqx_ctl em um setup emqx dockerizado usando um comando como

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

você vê uma mensagem de erro 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

Solução

O problema aqui é que emqx_ctl está tentando conectar ao endereço IP para node1.emqx.mydomain.com mas esse endereço IP não aponta para o endereço IP do container docker (talvez seja o endereço IP público do seu servidor?)

A solução aqui é criar um alias de rede dentro do docker/docker-compose para que o sistema DNS do Docker resolva node1.emqx.mydomain.com para o endereço IP interno do container.

Por exemplo, no docker-compose, você pode criar sua rede usando

docker_networks_emqx.yml
networks:
  emqx:
    driver: bridge

e então configurar o alias para o container 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"

Check out similar posts by category: Container Docker EMQX MQTT