我正在尝试对我的应用程序进行黑盒测试。所以我创建了撰写文件
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是已知主机