无法连接到容器外部的Kafka

问题描述

我正在尝试对我的应用程序进行黑盒测试。所以我创建了撰写文件

version: '3.4'
services:  
  kafka:
    image: "spotify/kafka"
    environment:
      - ADVERTISED_HOST=kafka
      - ADVERTISED_PORT=9092
    ports:
      - "9092:9092"
      - "2181:2181"
    networks:
      testing_net:
        ipv4_address: 172.17.0.2
  app:
    build: ./blackBox
    image: app    
    networks:
      testing_net:
        ipv4_address: 172.17.0.4
networks:
  testing_net:
    ipam:
      driver: default
      config:
        - subnet: "172.17.0.0/16"

它工作正常,应用程序容器中的应用程序可以使用kafka:9092主机连接到kafka。 但是应用程序是消费者,而生产者则位于容器之外。当我尝试在容器外部填充数据时,出现错误

[kafka-producer-network-thread | producer] WARN o.apache.kafka.clients.NetworkClient - [Producer clientId=producer] Error connecting to node kafka:9092 (id: 0 rack: null) 

我可以在主机文件添加“ kafka”主机,它也许可以工作,但是我不仅要在本地计算机上,还要在CI \ CD上运行这种情况

我试图设置ADVERTISED_HOST = 172.17.0.2。它也不行。

我无法编辑任何kafka配置文件,只能使用docker-compose文件

任何建议将不胜感激。谢谢

UPD。

使用肮脏的骇客解决了此问题。对于Windows,肯定要检查其他系统,对于Docker,需要在主机文件添加以下主机:kubernetes.docker.internal:127.0.0.1在这种情况下,我在容器内使用

kafka:
    image: "spotify/kafka"
    environment:
      - ADVERTISED_HOST=kubernetes.docker.internal
      - ADVERTISED_PORT=9092
    ports:
      - "9092:9092"
      - "2181:2181"
    networks:
      testing_net:
        ipv4_address: 172.16.238.102
    extra_hosts:
      - "kubernetes.docker.internal:172.16.238.102"

kafka代理可用于外部应用程序,因为kubernetes.docker.internal是已知主机

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)