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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:15:45