如何修复 docker emqx_ctl Node [email protected] not responding to pings

问题:

尝试在 dockerized emqx 设置中使用类似这样的命令运行 emqx_ctl

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

你看到类似这样的错误消息

emqx_node_not_responding.txt
Node '[email protected]' not responding to pings.
/opt/emqx/bin/emqx: line 41: die: command not found

解决方案

这里的问题是 emqx_ctl 尝试连接到 node1.emqx.mydomain.com 的 IP 地址,但该 IP 地址不指向 docker 容器的 IP 地址(也许它是你服务器的公共 IP 地址?)

此处的解决方案是在 docker/docker-compose 中创建网络别名,以便 Docker DNS 系统将 node1.emqx.mydomain.com 解析为容器的内部 IP 地址。

例如,在 docker-compose 中,你可以使用以下命令创建网络

docker_networks_emqx.yml
networks:
  emqx:
    driver: bridge

然后使用以下命令为容器配置别名

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