Docker 无法建立到节点-1的连接

Docker 无法建立到节点-1的连接,docker,apache-kafka,kafka-producer-api,Docker,Apache Kafka,Kafka Producer Api,我在虚拟机上安装了zookeeper和kafka docker容器。我的设置看起来像 zookeeper: image: confluentinc/cp-zookeeper:latest name:zookeeper ZOOKEEPER_CLIENT_PORT: 2181 ports: - "2181:2181" kafka: image: confluentinc/cp-kafka:latest hostname: kafka ports:

我在虚拟机上安装了zookeeper和kafka docker容器。我的设置看起来像

 zookeeper:
    image: confluentinc/cp-zookeeper:latest
    name:zookeeper
ZOOKEEPER_CLIENT_PORT: 2181
  ports:
  - "2181:2181"

kafka:
   image: confluentinc/cp-kafka:latest
   hostname: kafka
 ports:
     - "9092:9092"
     - "29092:29092"
   depends_on:
     - zookeeper
   KAFKA_BROKER_ID: "-1"
   KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181");
   ALLOW_PLAINTEXT_LISTENER: "yes"
   KAFKA_LISTENERS: "PLAINTEXT://9092, PLAINTEXT_HOST://29092"
   KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092, PLAINTEXT_HOST://localhost:29092"
   KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT"
   KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
   KAFKA_DEFAULT_REPLICATION_FACTOR: "1"
   AUTO.LEADER.REBALANCE.ENABLE: "true"
   KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE: "true"
   KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
现在我正试图从我的本地机器向卡夫卡发送一些消息,但我得到了以下错误

  Connection to node -1 (//ip-of-virtualmachine:29092) could not be established. Broker may not be available.
我在本地机器上配置kafka producer以发送消息。我的代码中配置引导服务器的属性是

 String bootstrapServers = "virtual-machine-ip:29092";
 Properties kafka-properties = new Properties();
 kafka-properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
 .
 .
 .
 create producer and send some record etc.

我在网上找到的所有例子都是关于docker和kafka的。它们都与卡夫卡、docker和虚拟机无关。任何帮助都将不胜感激

可能您没有向主机公开kafka容器的端口,请尝试通过以下方式公开端口29092:

ports:
 - "29092:29092"
或者在主机网络中运行容器
docker-d--net=host…
如果从docker compose运行容器,请将
network\u模式:host
添加到服务中

要修复docker配置,您可以从这里获得灵感:

可能您没有向主机公开kafka容器的端口,请尝试通过以下方式公开端口29092:

ports:
 - "29092:29092"
或者在主机网络中运行容器
docker-d--net=host…
如果从docker compose运行容器,请将
network\u模式:host
添加到服务中

要修复docker配置,您可以从这里获得灵感:

如果您的代码在虚拟机之外运行,则需要设置一个从虚拟机到主机并通过容器的外部端口


顺便说一下,Docker机器将为您创建虚拟机,而不是您自己在其中安装Docker

如果您的代码在虚拟机之外运行,则需要使您拥有一个从虚拟机到主机并通过容器的外部端口



顺便说一句,Docker机器将为您创建虚拟机,而不是您自己在其中安装Docker

我还将省略KAFKA_BROKER_ID:“-1”我暴露了这些端口,但运气不好。当从我的本地机器向安装在虚拟机上的kafka docker发送一些消息时,我应该使用哪个ip?该虚拟机的ip地址我使用了该ip,但收到了相同的错误。我也暴露了所需的端口。你能ping那台机器吗?另外,检查你的虚拟机上的端口是否由sudo netstat-nlp | grep:29092打开,我也会省略KAFKA_BROKER_ID:“-1”我暴露了这些端口,但没有运气。当从我的本地机器向安装在虚拟机上的kafka docker发送一些消息时,我应该使用哪个ip?该虚拟机的ip地址我使用了该ip,但收到了相同的错误。我也暴露了所需的端口。你能ping那台机器吗?另外,检查您的虚拟机上的端口是否由sudonetstat-nlp | grep:29092打开,您从哪里获得此撰写文件的?它配置错误…@cricket_007我通过查看不同的合成文件,根据我的要求创建了此合成文件。如何正确配置它?谢谢。为什么要创建自己的?Confluent Docker quickstart one运行良好您从何处获得此撰写文件?它配置错误…@cricket_007我通过查看不同的合成文件,根据我的要求创建了此合成文件。如何正确配置它?谢谢。为什么要创建自己的?汇合Docker quickstart one运行良好。我的代码正在本地计算机上运行。我想向安装在虚拟机上的卡夫卡发送一些数据。我也尝试了上述建议,但在这种情况下,我得到了同样的错误。我使用docker ip和虚拟机ip,但没有成功。当我在本地计算机上运行代码时,要访问虚拟机中的kafka容器,我应该使用哪个ip和端口?如果在VM设置中正确设置端口转发,那么您将继续使用localhost 29092,但是,不清楚您的服务是否正确启动,因为正如我所说,您显示的撰写文件不正确。我的代码正在本地计算机上运行。我想向安装在虚拟机上的卡夫卡发送一些数据。我也尝试了上述建议,但在这种情况下,我得到了同样的错误。我使用docker ip和虚拟机ip,但没有成功。当我在本地计算机上运行代码时,要访问虚拟机中的kafka容器,我应该使用哪个ip和端口?如果在VM设置中正确设置端口转发,那么您将继续使用localhost 29092,但是,不清楚您的服务是否正确启动,因为正如我所说,您显示的撰写文件不正确