Docker-Compose+RabbitMQ+Pika连接报错socket.gaierror求助
问题解决方案
核心错误原因
Pika连接RabbitMQ时,host参数不能加http://前缀——RabbitMQ的AMQP协议(5672端口)是纯TCP协议,并非HTTP协议,添加前缀会导致域名解析失败,触发socket.gaierror。
修复步骤
修正Pika连接代码
移除host值中的http://前缀,同时确保传入正确的认证信息:credentials = pika.PlainCredentials('rabbitmq', '27474129') # 同一Docker网络内可直接用容器名解析 conn_params = pika.ConnectionParameters(host="rabbitmq", port=5672, credentials=credentials) # 也可使用固定IP连接 # conn_params = pika.ConnectionParameters(host="192.168.220.10", port=5672, credentials=credentials) connection = pika.BlockingConnection(conn_params) channel = connection.channel()注意:必须将
credentials传入ConnectionParameters,否则会使用默认账号密码,引发后续权限错误。确认Docker网络配置
确保FastAPI容器的docker-compose配置加入了和RabbitMQ相同的自定义网络net,示例:fastapi-app: container_name: fastapi-app image: your-fastapi-image networks: net: ipv4_address: 192.168.220.5同一自定义网络内,容器可通过容器名直接解析,无需依赖本地hosts配置。
验证网络连通性
进入FastAPI容器内部,测试与RabbitMQ的连通性:# 进入容器 docker exec -it fastapi-app /bin/sh # 测试容器名解析是否正常 ping rabbitmq # 测试5672端口是否开放 telnet rabbitmq 5672若ping不通,检查两个容器是否确实在同一网络;若telnet失败,检查RabbitMQ容器是否正常启动、5672端口是否被防火墙拦截。
排除其他干扰项
- 不要用15672端口连接AMQP,该端口是RabbitMQ管理界面的HTTP端口,AMQP协议仅使用5672端口。
- 确认RabbitMQ容器的
RABBITMQ_DEFAULT_USER和RABBITMQ_DEFAULT_PASS环境变量配置正确,且容器启动日志无报错。
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

