首页 > 解决方案 > 无法连接到本地 Docker 容器中的 Kafka (Windows)

问题描述

我正在尝试在 Docker 容器中本地启动 Kafka,但似乎没有正确组合选项。

我在 Windows 10、Docker ce 版本 2.0.0.3 (31259) 上运行。

我在做什么

  1. 在 Docker 容器中运行 Zookeeper

    docker run -d --name=zookeeper1 --network=host --env-file=zookeeper_options confluentinc/cp-zookeeper

由于 zookeeper 运行良好,我将省略环境文件。

  1. 在 Docker 容器中运行 Kafka

    docker run -d --network=host --name=kafka --env-file=kafka_options confluentinc/cp-kafka

kafka_options文件包含

KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181
KAFKA_LISTENERS=PLAINTEXT://localhost:9092
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092
  1. 尝试获取元数据列表

    kafkacat -b localhost:29092 -L

(我在 Windows 10 Ubuntu 子系统中执行此操作,其他我从 PowerShell 运行。我也有一个小型 Java Kafka 应用程序,但它表现出相同的行为)

结果是

% 错误:无法获取元数据:本地:代理传输失败

我读过的

显然,Docker 文档的快速入门使用了我不想要的 docker-compose;以及文档的 Docker 部分

除此之外,最值得注意的是 Robin 的这篇文章解释了广告听众的概念,但我仍然看不出我做错了什么。

我还发现这个问题是关于 Windows 中的一个差异,阻止您在 Windows 中使用官方的快速入门步骤;这导致我尝试使用单独的网络进行替代运行。

独立网络

按照问题中的步骤:

  1. docker network create confluent
  2. docker run -d --name=zookeeper1 --network=confluent -p 22181:2181 --env-file=zookeeper_options confluentinc/cp-zookeeper
  3. docker run -d --network=confluent --name=kafka -p 29092:9092 --env-file=kafka_options confluentinc/cp-kafka
  4. kafkacat -b localhost:29092 -L

这确实将结果更改为

% 错误:获取元数据失败:本地:超时

所以看起来至少它是连接的,但这最终并没有多大帮助。

问题是我做错了什么?是 Kafka 配置选项,还是我不知道的 Docker 问题?

编辑:

它确实适用于此处的示例 docker-compose.yml,但我们不应该能够单独启动容器吗?

标签: dockerapache-kafka

解决方案


推荐阅读