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

Docker Compose环境下Pika连接RabbitMQ被拒绝问题求助

搞定Docker Compose里容器连RabbitMQ的坑

嘿,我一眼就瞅到你这个问题的核心了——你在listener容器里用localhost连RabbitMQ,可容器里的localhost指的是它自己啊!RabbitMQ明明在另一个容器里,自然连不上,这就是为啥会报连接拒绝的错。而且Pika还瞎尝试IPv6,雪上加霜,咱一步步解决:

第一步:把localhost换成Docker服务名

在Docker Compose的默认网络里,各个服务能直接用服务名互相访问。你的RabbitMQ服务叫rabbitMQ,所以把连接代码改成这样就行:

self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='rabbitMQ'))

这样Docker内部的DNS会自动把rabbitMQ解析成对应的容器IP,不用你管具体地址。

第二步:强制Pika用IPv4(万一还有问题)

如果改了地址还是遇到IPv6的报错,那就直接给Pika加个参数,让它老老实实走IPv4:
先导入socket模块:

import socket

然后修改连接参数:

params = pika.ConnectionParameters(
    host='rabbitMQ',
    socket_options=(
        (socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),
        (socket.IPPROTO_IP, socket.IPV6_V6ONLY, 0)  # 关掉纯IPv6模式,优先用IPv4
    )
)
self.connection = pika.BlockingConnection(params)

额外小检查

从你的日志看,RabbitMQ已经监听了[::]:5672,这个是兼容IPv4的,所以只要容器间网络通,用服务名肯定能连上。另外你docker-compose里的端口映射是给宿主机用的,容器之间通信根本不需要,直接用5672默认端口就行。

要是改完还不行,你可以进listener容器里,用ping rabbitMQ或者telnet rabbitMQ 5672测测,看看能不能通,先排除网络问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:46:41