Docker Swarm + VerneMQ无法从本地主机连接

问题描述

我一直在尝试创建一个 docker compose 文件来在 swarm 中的不同节点上运行服务。 VerneMQ 的想法是在一个集群内有一个主节点和 N 个(在我的例子中是 2)个副本。

这是目前我的 docker-compose.yml

version: "3.7"
services:
  vmq0:
    image: erlio/docker-vernemq
    environment:
      DOCKER_VERNEMQ_SWARM: 1
      DOCKER_VERNEMQ_ACCEPT_EULA: "yes"
      DOCKER_VERNEMQ_PLUGINS.vmq_passwd: 'off'
      DOCKER_VERNEMQ_ALLOW_ANONYMOUS: 'on'
      DOCKER_NET_INTERFACE: eth0
  vmq:
    image: erlio/docker-vernemq
    depends_on:
      - vmq0
    environment:
      DOCKER_VERNEMQ_SWARM: 1
      DOCKER_VERNEMQ_disCOVERY_NODE: vmq0
      DOCKER_VERNEMQ_ACCEPT_EULA: "yes"
      DOCKER_VERNEMQ_PLUGINS.vmq_passwd: 'off'
      DOCKER_VERNEMQ_ALLOW_ANONYMOUS: 'on'
      DOCKER_NET_INTERFACE: eth1
    ports:
      - 50005:1883
      - 8080:8080
    deploy:
      replicas: 2

我创建了群。

尝试部署堆栈:

docker stack deploy -c docker-compose.yml  my-vernemq-stack

输出

Ignoring deprecated options:.

Creating network my-vernemq-stack_default
Creating service my-vernemq-stack_vmq0
Creating service my-vernemq-stack_vmq

主节点输出(两个“从”节点都成功加入):

13:34:43.340 [info] successfully connected to cluster node 'VerneMQ@10.0.9.4'
13:34:43.454 [info] successfully connected to cluster node 'VerneMQ@10.0.9.3'

我试图获取容器的 IP:

docker inspect my-vernemq-stack_default | grep \"IPv4Address\"

输出

{
    "Name": "my-vernemq-stack_default","Id": "q5kd6opgjlqa7ujwmthnbtfna","Created": "2021-02-02T14:34:02.314934034+01:00","Scope": "swarm","Driver": "overlay","EnableIPv6": false,"IPAM": {
        "Driver": "default","Options": null,"Config": [
            {
                "subnet": "10.0.9.0/24","Gateway": "10.0.9.1"
            }
        ]
    },"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {
        "Network": ""
    },"ConfigOnly": false,"Containers": {
        "0cb6e914e67c0e41599c8ddf75ce44929f643908a450159bfb2d2d9080a32de3": {
            "Name": "my-vernemq-stack_vmq0.1.ynme6f8mtwqr4oxkw6zou95ui","EndpointID": "e335251e3177c96ac6f0376176bdb31b977f76ac1e7e3d1a8f18781dcbc67262","MacAddress": "02:42:0a:00:09:07","IPv4Address": "10.0.9.7/24","IPv6Address": ""
        },"0ce3ce054697bf7d37ff3ba2294ce54ee10e0dd340dfe126c384ae63fc3169ec": {
            "Name": "my-vernemq-stack_vmq.2.u9r8d59oqrojecrcpc7lf0v35","EndpointID": "a182ba573d9c63311c54a9d04386f6d041e8fcf1072dc4730c4896834f1935be","MacAddress": "02:42:0a:00:09:04","IPv4Address": "10.0.9.4/24","e856a33fd9d3d6fcac59faf80720bac0e041aa83e9a381e5d5691a5b400e659d": {
            "Name": "my-vernemq-stack_vmq.1.qqjn9fxjui3mm4k6h9ktsw6vk","EndpointID": "6440fe5de53726324b8600327c891cfcf193bcc0595120e467671c572d2f9fe7","MacAddress": "02:42:0a:00:09:03","IPv4Address": "10.0.9.3/24","lb-my-vernemq-stack_default": {
            "Name": "my-vernemq-stack_default-endpoint","EndpointID": "3c22cf723503a85ce4d668fd87fb40f876686e2ccb2e8ac9eb311a2f5648f9b1","MacAddress": "02:42:0a:00:09:05","IPv4Address": "10.0.9.5/24","IPv6Address": ""
        }
    },"Options": {
        "com.docker.network.driver.overlay.vxlanid_list": "4105"
    },"Labels": {
        "com.docker.stack.namespace": "my-vernemq-stack"
    },"Peers": [
        {
            "Name": "bb1480d58797","IP": "192.168.1.14"
        }
    ]
}

这些是 IPv4 地址:

"IPv4Address": "10.0.9.7/24",

前三个是容器/节点 IPv4,最后一个是网络的认端点。

现在,我尝试使用 mosquitto 代理订阅任何节点:

sudo mosquitto_sub -h 10.0.9.7 -p 1883 -t Sample/Topic -d

但是没有任何反应。群内的一切都在工作,我可以使用“docker exec”连接到容器,但我无法发布或订阅代理(我没有得到任何回应)。我做错了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)