Я пытаюсь запустить службу kafka с помощью docker-compose, и к ней должен быть доступ как внутри, так и снаружи docker. Таким образом, следует настроить правильных рекламодателей внутри и снаружи:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9094:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
Проблема в том, что при попытке подключиться извне кластера, я не получаю 127.0.0.1 в качестве имени узла, а внутреннее имя хоста:
$ kafkacat -L -b 127.0.0.1:9094
Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap):
1 brokers:
broker 1001 at 91588ea968d4:9092
28 topics:
...
Разве целью KAFKA_ADVERTISED_LISTENERS и KAFKA_LISTENERS не является разрешение этой ситуации? Я попытался установить KAFKA_ADVERTISED_HOST_NAME, но он игнорируется (одна часть документации говорит, что она устарела, другая говорит, что она все еще активна), но, тем не менее, это не является ответом, поскольку я хочу два разных объявленных имени хоста для двух разных сетей.
Полагаю, старый вопрос остается: как заставить kafka работать внутри и снаружи docker-compose?