Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

536
Vistas
Mi contenedor docker kafka no puede conectarse a mi contenedor docker zookeeper

Quiero usar confluent/kafka y confluent/zookeeper y ejecutarlos en un solo servidor Ubuntu.

Estoy usando las siguientes configuraciones:

docker run -e ZOOKEEPER_CLIENT_PORT=2181 --name zookeeper confluent/zookeeper

docker run --name kafka -e KAFKA_ADVERTISED_HOST_NAME=kafka -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_CREATE_TOPICS=testtopic:1:1 confluent/kafka

Sin embargo, esto da como resultado: No se puede conectar con zookeeper: 2181

Tengo otros contenedores a los que me gustaría conectarme, ¿cómo puedo acceder a zookeeper a través de zookeeper:2181 y kafka a través de kafka:9092?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hay varias maneras de hacer esto. Pero antes de analizarlo, hay dos problemas en su enfoque que debe comprender.

  • No se puede acceder al host zookeper cuando usa docker run ya que cada uno de los contenedores se ejecuta en un aislamiento de red diferente
  • kafka puede iniciarse e intentar conectarse a zookeeper pero zookeeper aún no está listo

Resolviendo el problema de la red

Puedes hacer muchas cosas para arreglar las cosas.

use --net=host para ejecutar ambos en la red host

use docker network create <name> y luego use --net=<name> mientras lanza ambos contenedores

O puede ejecutar su contenedor kafka en la red de contenedores zookeeper .

use --net=container:zookeeper cuando inicie el contenedor kafka . Esto asegurará que el anfitrión del zookeeper del zoológico sea accesible. Esto no se recomienda como tal, a menos que tenga una razón de peso para hacerlo. Porque tan pronto como el contenedor zookeeper se caiga, también lo hará la red de su contenedor kafka . Pero para que se entienda, he puesto esta opción aquí.

Resolviendo el problema de la carrera de inicio

O puede mantener un espacio entre el inicio de zookeeper y kafka , para asegurarse de que cuando kafka inicie zookeeper esté en funcionamiento

Otra opción es usar --restart=on-failure flag con docker run. Esto asegurará que el contenedor se reinicie en caso de falla e intentará volver a conectarse a zookeeper y, con suerte, ese tiempo se zookeeper .

En lugar de usar docker run , siempre preferiría docker-compose para ejecutar dichos contenedores vinculados. Puede hacerlo creando un archivo docker-compose.yml simple y luego ejecutándolo con docker-compsoe up

 version: "3.4" services: zookeeper: image: confluent/zookeeper environment: - ZOOKEEPER_CLIENT_PORT=2181 kafka: image: confluent/kafka environment: - KAFKA_ADVERTISED_HOST_NAME=kafka - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_CREATE_TOPICS=testtopic:1:1 depends_on: - zookeeper restart: on-failure
over 4 years ago · Santiago Trujillo Denunciar

0

Sin embargo, estoy ejecutando en Mac, esto funciona bien. Dado que la red 'host' no funciona en mac, solo creo una red llamada kafka_net y coloco los contenedores allí.

 version: "3.4" services: zookeeper: image: confluent/zookeeper environment: - ZOOKEEPER_CLIENT_PORT=2181 networks: - kafka_net kafka: image: confluent/kafka environment: - KAFKA_ADVERTISED_HOST_NAME=kafka - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 depends_on: - zookeeper networks: - kafka_net restart: on-failure networks: kafka_net: driver: "bridge"

Para asegurarse de que todo funcione:

Inicie sesión en el contenedor del cuidador del zoológico y luego

 zookeeper-shell localhost:2181 => You should see something like 'Welcome to ZooKeeper!' after all the big chunk of text

Inicie sesión en el contenedor kafka y luego

 kafka-topics --zookeeper zookeeper:2181 --list # empty list kafka-topics --zookeeper zookeeper:2181 --create --topic first_topic --replication-factor 1 --partitions 1 kafka-topics --zookeeper zookeeper:2181 --list # you will see the first_topic kafka-console-producer --broker-list localhost:9092 --topic first_topic # type some text and ctrl + c kafka-console-consumer --bootstrap-server localhost:9092 --zookeeper zookeeper:2181 --topic first_topic --from-beginning # you will see the stuff you typed first_topic

Si sigue dando problemas, eche un vistazo a los ejemplos oficiales. https://github.com/confluentinc/cp-docker-images/tree/5.2.2-post/examples y aún dando problemas para publicarlo, le dará una mano.

over 4 years ago · Santiago Trujillo Denunciar

0

Docker inicia contenedores en una red aislada, llamada default bridge menos que especifique la red explícitamente.

Puede tener éxito de diferentes maneras, aquí hay 2 más fáciles:

  1. Coloque contenedores en la misma red puente definida por el usuario

     # create net docker network create foo docker run --network=foo -e ZOOKEEPER_CLIENT_PORT=2181 --name zookeeper confluent/zookeeper docker run --network=foo --name kafka -e KAFKA_ADVERTISED_HOST_NAME=kafka -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_CREATE_TOPICS=testtopic:1:1 confluent/kafka
  2. Exponga los puertos y conéctese a través de localhost

     docker run -p 2181:2181 -e ZOOKEEPER_CLIENT_PORT=2181 --name zookeeper confluent/zookeeper docker run --name kafka -e KAFKA_ADVERTISED_HOST_NAME=kafka -e KAFKA_ZOOKEEPER_CONNECT=host.docker.internal:2181 -e KAFKA_CREATE_TOPICS=testtopic:1:1 confluent/kafka

Nota: en el segundo enfoque, debe usar host.docker.internal como nombre de host y exponer (publicar) el puerto 2181 para el primer contenedor para que esté disponible en localhost

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda