Docker 无法连接到网络之外的卡夫卡
我试图在一个容器中连接我的作业,该容器将事件发送到另一个容器中的kafka群集。 无论我尝试了什么,我都无法将事件发送到卡夫卡主题 我已经尝试将telnet和kafkacat连接到我的kafka的地址侦听器端口,一切正常: 这是我的作业撰写文件,“172.16.33.91”是我的本地ip地址:Docker 无法连接到网络之外的卡夫卡,docker,apache-kafka,docker-compose,Docker,Apache Kafka,Docker Compose,我试图在一个容器中连接我的作业,该容器将事件发送到另一个容器中的kafka群集。 无论我尝试了什么,我都无法将事件发送到卡夫卡主题 我已经尝试将telnet和kafkacat连接到我的kafka的地址侦听器端口,一切正常: 这是我的作业撰写文件,“172.16.33.91”是我的本地ip地址: version: '3' services: events-processor: build: context: ./events-processor
version: '3'
services:
events-processor:
build:
context: ./events-processor
extra_hosts:
- "host:172.16.33.91"
restart: unless-stopped
这是我的作业代码,它将数据从1->1000发送到现有主题num test:
from time import sleep
from json import dumps
from kafka import KafkaProducer
if __name__=="__main__":
producer = KafkaProducer(bootstrap_servers=['host:9093'],
value_serializer=lambda x: dumps(x).encode('utf-8'))
for e in range(1000):
data = {'number' : e}
producer.send('numtest', value=data)
print(data)
sleep(5)
这是我的卡夫卡动物园管理员撰写文件:
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- zk-data:/var/lib/zookeeper/data
- zk-logs:/var/lib/zookeeper/log
- secrets:/etc/zookeeper/secrets
restart: unless-stopped
kafka:
image: confluentinc/cp-kafka
depends_on:
- zookeeper
ports:
- "9093:9093"
environment:
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_LISTENERS: INTERNAL://:9092,EXTERNAL://:9093
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
volumes:
- kafka-data:/var/lib/kafka/data
- secrets:/etc/kafka/secrets
restart: unless-stopped
volumes:
zk-logs: {}
zk-data: {}
kafka-data: {}
secrets: {}
有人知道我做错了什么吗?感谢任何帮助 我记得在连接方面遇到了类似的问题。事实证明,为了使您的容器能够访问主机上的端口,您可能需要向防火墙添加其他规则以打开它 例如,对于iptables,您可以添加如下规则,以允许主机接受来自docker容器的请求
-A INPUT -i docker0 -j ACCEPT
或者,您可以将作业容器与kafka/zookeeper放在同一docker网络上。将应用程序放在同一docker compose文件中,或使用公共外部docker网络 我记得在连接方面遇到了类似的问题。事实证明,为了使您的容器能够访问主机上的端口,您可能需要向防火墙添加其他规则以打开它 例如,对于iptables,您可以添加如下规则,以允许主机接受来自docker容器的请求
-A INPUT -i docker0 -j ACCEPT
或者,您可以将作业容器与kafka/zookeeper放在同一docker网络上。将应用程序放在同一docker compose文件中,或使用公共外部docker网络 如果有更好的地方可以放置这些信息,或者您缺少的关键字来找到解决方案,请告知社区 已经有多个博客写过了
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,HOST://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,HOST:PLAINTEXT
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,HOST://0.0.0.0:9093
://:port
地址将只侦听本地主机名,不管是否侦听容器如果有一个更好的地方应该把这些信息,或关键字,你错过了找到解决办法,让社区知道 已经有多个博客写过了
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,HOST://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,HOST:PLAINTEXT
KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,HOST://0.0.0.0:9093
://:port
地址将只侦听本地主机名,不管是否侦听容器你说不能连接是什么意思?连接被拒绝?连接超时?卡夫卡什么也没收到?什么错误?无法连接是什么意思?连接被拒绝?连接超时?卡夫卡什么也没收到?什么错误?