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

Docker Kafka容器与Python消费者容器无法连接问题排查

Kafka容器与Python消费者容器连接失败问题排查

问题描述

我有两个Docker容器:一个运行Kafka(容器名broker),另一个运行带Kafka客户端的Python程序。两个容器处于同一自定义网络my-network,但运行Python连接代码时持续出现连接拒绝错误:

%3|1725885842.079|FAIL|rdkafka#consumer-1| [thrd:localhost:172/bootstrap]: localhost:172/bootstrap: Connect to ipv4#127.0.0.1:172 failed: Connection refused (after 0ms in state CONNECT)

Docker网络配置信息

[
    {
        "Name": "my-network",
        "Id": "c920653a8c4d9e068887bce98dab2f5bf2f554e112a2cbd337d3a7feefc45b5b",
        "Created": "2024-09-06T14:39:28.375456878Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "02bf3754f2b27276db07762cf6237872dfa36bcd85d4e1feb7d7d6f13ff97a82": {
                "Name": "broker",
                "EndpointID": "13d97b89c9c4980c7c71b25e8aba4fc94d9a60b344720fca44fb66adc40af15b",        
                "MacAddress": "02:42:ac:14:00:03",
                "IPv4Address": "172.20.0.3/16",
                "IPv6Address": ""
            },
            "8fb0fab1c6c8f97033739a5936661e04df02de25c6a77cc9bb4c8259b21095a7": {
                "Name": "agitated_shirley",
                "EndpointID": "9c14de0df28233489e56b5354bd7621239eca948b5c4c7adabf3fccf6a98779d",        
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Python连接代码

from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
from confluent_kafka import Consumer

conf = {'bootstrap.servers': 'localhost:172.20.0.3', 'group.id':'main-group','auto.offset.reset':'smallest'}

consumer = Consumer(conf)

running = True

我已尝试重新创建网络和容器,但问题依旧,请问哪里操作出错了?


问题分析与解决方案

1. Bootstrap地址格式完全错误

你的bootstrap.servers配置格式写反,正确格式应为[主机名/IP]:[端口],而非localhost:172.20.0.3。同时,Kafka默认的bootstrap端口是9092,你写的172是子网段前缀,并非端口号。

2. 错误使用localhost访问Kafka容器

在Docker容器内部,localhost指向容器自身,而非同一网络中的Kafka容器。同一Docker网络内,应使用Kafka容器的名称(broker)或容器IP(172.20.0.3)来访问。

修正后的Python配置

方案一:使用容器名(推荐,IP可能随容器重建变化)

conf = {'bootstrap.servers': 'broker:9092', 'group.id':'main-group','auto.offset.reset':'smallest'}

方案二:使用容器IP

conf = {'bootstrap.servers': '172.20.0.3:9092', 'group.id':'main-group','auto.offset.reset':'smallest'}

额外注意事项

确保启动Kafka容器时,正确配置KAFKA_ADVERTISED_LISTENERS环境变量,让Kafka向客户端返回可访问的地址。例如:

docker run -d --name broker --network my-network \
  -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
  -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://broker:9092 \
  confluentinc/cp-kafka:latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:40:22