如何强制Docker Stack部署的RabbitMQ服务仅监听IPv4?
解决Docker Stack部署RabbitMQ仅监听IPv4的问题
问题描述
Docker Stack部署的RabbitMQ默认监听IPv6地址,导致IPv4连接被重置,具体表现:
- IPv6连接测试成功:执行
ncat -w 2 -v ::1 5672 </dev/null; echo $?,显示连接到::1:5672 - IPv4连接测试失败:执行
ncat -w 2 -v 127.0.0.1 5672 </dev/null; echo $?,返回连接重置,值为1 - 端口监听检查:
sudo netstat -tulnp|grep 5672显示5672、15672端口均监听IPv6地址
当前使用的Docker Compose配置片段:
rabbitmq-3-11-0: #image: rabbitmq:3.11.0-management image: "127.0.0.1:5000/bcl-sdv-rabbitmq-3-11-0:v0.1" ports: - "0.0.0.0:5672:5672/tcp" - "0.0.0.0:15672:15672/tcp" #15672: HTTP API clients, management UI and rabbitmqadmin (only if the management plugin is enabled)
环境信息:Docker Server 20.10.20,内核3.10.0-1160.76.1.el7.x86_64,LSB core-4.1
解决方案
修改Docker Compose配置,为RabbitMQ添加环境变量强制其仅监听IPv4地址:
rabbitmq-3-11-0: #image: rabbitmq:3.11.0-management image: "127.0.0.1:5000/bcl-sdv-rabbitmq-3-11-0:v0.1" ports: - "0.0.0.0:5672:5672/tcp" - "0.0.0.0:15672:15672/tcp" #15672: HTTP API clients, management UI and rabbitmqadmin (only if the management plugin is enabled) environment: - RABBITMQ_NODE_IP_ADDRESS=0.0.0.0
配置说明
RABBITMQ_NODE_IP_ADDRESS=0.0.0.0:该环境变量指定RabbitMQ节点绑定IPv4的0.0.0.0地址,覆盖默认的全地址监听(包含IPv6),强制服务仅响应IPv4请求。
验证步骤
- 重新部署服务:执行
docker stack deploy -c <你的compose文件名.yml> <栈名称> - 测试IPv6连接:
ncat -w 2 -v ::1 5672 </dev/null; echo $?,应返回非0值(连接失败) - 测试IPv4连接:
ncat -w 2 -v 127.0.0.1 5672 </dev/null; echo $?,应返回0(连接成功) - 检查端口监听:
sudo netstat -tulnp|grep 5672,应显示端口监听0.0.0.0:5672而非:::5672
内容的提问来源于stack exchange,提问作者Allan K
相关产品推荐
相关产品推荐

