集群在不同机器上运行的Vernemq Docker容器

时间:2020-09-21 14:25:01

标签: docker docker-compose mqtt-vernemq

我希望仅通过在第二个实例的docker-compose.yml文件上使用以下代码段,这将是一个简单的选择

- DOCKER_VERNEMQ_DISCOVERY_NODE=<ip address of the first instance> 

但这似乎不起作用。

第二个实例的日志确认它正在尝试集群:

13:56:09.795 [info] Sent join request to: 'VerneMQ@<ip address of the first instance>'
13:56:16.800 [info] Unable to connect to 'VerneMQ@<ip address of the first instance>'

虽然第一个实例的日志根本不显示任何内容。

在第二个实例中,我可以确认端点是可访问的:

$ docker exec -it vernemq /bin/sh
$ curl <ip address of the first instance>:44053
curl: (56) Recv failure: Connection reset by peer

然后在第一个实例的日志中看到一个完全可以预期的错误,并确认我已经到达第一个实例

13:58:33.572 [error] CRASH REPORT Process <0.3050.0> with 0 neighbours crashed with reason: bad argument in vmq_cluster_com:process_bytes/3 line 142
13:58:33.572 [error] Ranch listener {{172,19,0,2},44053} terminated with reason: bad argument in vmq_cluster_com:process_bytes/3 line 142

这可能与以下事实有关:从docker容器内部看到的IP地址为172.19.0.2,而外部为10. ...

也尝试将第一个实例的主机名添加到known_hosts无济于事。

请告知。

我正在使用erlio / docker-vernemq:1.10.0

$ docker --version
Docker version 19.03.13, build 4484c46d9d

$ docker-compose --version
docker-compose version 1.27.2, build 18f557f9

1 个答案:

答案 0 :(得分:0)

我设法通过创建docker overlay network

来进行排序

在计算机1上:docker swarm init
在machine2上:docker swarm join --token ...
在计算机1上:docker network create --driver=overlay --attachable vernemq-overlay-net

我的dockerfile的相关位是:

version: '3.6'

services:
  vernemq:
    container_name: ${NODE_NAME:?Node name not specified}
    image: vernemq/vernemq:1.10.4.1
    environment:
      - DOCKER_VERNEMQ_NODENAME=${NODE_NAME:?Node name not specified}
      - DOCKER_VERNEMQ_DISCOVERY_NODE=${DISCOVERY_NODE:-}

networks:
  default:
    external:
      name: vernemq-overlay-net

具有以下环境变量:

machine1:

  • NODE_NAME = vernemq1.example.com
  • DISCOVERY_NODE =

machine2:

  • NODE_NAME = vernemq2.example.com
  • DISCOVERY_NODE = vernemq1.example.com

注意:
据我所知,由于docker-compose中的错误,机器2找不到vernemq-overlay-net的可能性。
在这种情况下,您可以使用docker:docker run -dit --name alpine --net=vernemq-overlay-net alpine启动容器,这将使其可用于docker-compose。