无法连接到容器外部的Kafka

时间:2020-08-14 15:57:50

标签: docker apache-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是已知主机

0 个答案:

没有答案