我一直在尝试创建一个 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",
"IPv6Address": ""
},
"e856a33fd9d3d6fcac59faf80720bac0e041aa83e9a381e5d5691a5b400e659d": {
"Name": "my-vernemq-stack_vmq.1.qqjn9fxjui3mm4k6h9ktsw6vk",
"EndpointID": "6440fe5de53726324b8600327c891cfcf193bcc0595120e467671c572d2f9fe7",
"MacAddress": "02:42:0a:00:09:03",
"IPv4Address": "10.0.9.3/24",
"IPv6Address": ""
},
"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",
"IPv4Address": "10.0.9.4/24",
"IPv4Address": "10.0.9.3/24",
"IPv4Address": "10.0.9.5/24",
前三个是容器/节点 IPv4,最后一个是网络的默认端点。
现在,我尝试使用 mosquitto 代理订阅任何节点:
sudo mosquitto_sub -h 10.0.9.7 -p 1883 -t Sample/Topic -d
但是没有任何反应。群内的一切都在工作,我可以使用“docker exec”连接到容器,但我无法发布或订阅代理(我没有得到任何回应)。我做错了什么?