You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm中RabbitMQ:如何按主机名发现任务实例

Docker Swarm中RabbitMQ DNS对等发现的问题

当前RabbitMQ集群配置

我在Docker Swarm中运行RabbitMQ集群,配置为全局服务,容器主机名设置为节点主机名,对应的docker-compose配置如下:

services:
  rabbitmq:
    image: "rabbitmq:3-management"
    hostname: "rabbitmq-{{.Node.Hostname}}"
    networks:
      - rabbitmq
    configs:
      - source: rabbitmq_config
        target: /etc/rabbitmq/rabbitmq.conf
    secrets:
      - source: rabbitmq_erlang_cookie
        target: /var/lib/rabbitmq/.erlang.cookie
    environment:
      RABBITMQ_NODENAME: "rabbit@rabbitmq-{{.Node.Hostname}}"
    deploy:
      mode: global

现有集群组建方式

目前每个节点会接收动态生成的配置文件来形成集群,生成该配置的脚本如下:

docker_hosts=$(docker node ls --format '{{.Hostname}}')
count=0
for host in ${docker_hosts}; do
  count=$((count+1))
  echo "cluster_formation.classic_config.nodes.${count} = rabbit@rabbitmq-${host}" >> rabbitmq.conf
done

切换到DNS对等发现的阻碍

我希望将上述经典发现配置替换为DNS对等发现后端,实现自动发现其他任务,但遇到了问题:

Docker Swarm内置的DNS支持通过查询tasks.<service name>来发现服务任务,查询tasks.rabbitmq的结果如下:

root@rabbitmq-foo-1:/# nslookup tasks.rabbitmq
Server:     127.0.0.11
Address:    127.0.0.11#53

Non-authoritative answer:
Name:   tasks.rabbitmq
Address: 10.100.8.158
Name:   tasks.rabbitmq
Address: 10.100.8.162
Name:   tasks.rabbitmq
Address: 10.100.8.163

按照RabbitMQ的逻辑,将tasks.rabbitmq作为种子主机名传递给它后,启动时会执行A记录查询,并将当前节点的前缀(比如rabbit@hostname1.example.local里的rabbit)追加到每个主机名返回结果。

但手动对查询到的IP做反向解析时,得到的结果是:

root@rabbitmq-foo-1:/# nslookup 10.100.8.158
158.8.100.10.in-addr.arpa   name = foo_rabbitmq.tjqxe6kpe5g4mnmgwoiuink16.xhosndlwm3eaoldu36udvjfi9.rabbitmq-net.

Docker DNS生成的反向记录格式为:

<Project Name>_<Task Name>.<Task ID>.<Container ID>.<Network Name>.

遗憾的是,RabbitMQ会检查解析后的反向记录是否与节点主机名匹配,只有匹配时才会加入集群。它需要的是类似rabbitmq-foo-1.whatever.的名称(对应节点主机名foo-1),而非Docker DNS返回的长格式名称,这导致无法正常组建集群。

问题

有没有办法解析到任务实例指定的主机名?或者有没有能获取所有Swarm节点的DNS端点?


内容的提问来源于stack exchange,提问作者Moritz Mazetti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:24:57