testcontainers / testcontainers/testcontainers-python

Bug: KafkaContainer.tc_start not starting when using a Network

Ouverte
#675 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
2.3k
Forks
386
Merge moyen
4 h 40 min
PR mergées (30 j)
1

Description

If fails to start, since tc_start assumes that the container is using host networking

from docker.types import EndpointConfig
from testcontainers.core.container import DockerContainer
from testcontainers.core.network import Network
from testcontainers.kafka import KafkaContainer

def _connect_to_network(ctr: DockerContainer, network: Network, alias: str):
    # Needed until https://github.com/testcontainers/testcontainers-python/issues/645 is fixed
    ctr.with_kwargs(
        network=network.name, networking_config={network.name: EndpointConfig("1.33", aliases=[alias])}
    )

with Network() as network:
      ctr = KafkaContainer(image=f"confluentinc/cp-kafka:{KAFKA_VERSION}")
     _connect_to_network(ctr, network, "kafka")
     with ctr:
           assert ctr.get_bootstrap_server(). # This should start

A possible fix:


def tc_start(self):
    # We replace these three lines, which assume host networking
    # host = self.get_container_host_ip()
    # port = self.get_exposed_port(self.port)
    # listeners = f"PLAINTEXT://{host}:{port},BROKER://$(hostname -i | cut -d' ' -f1):9092"
    listeners = f"PLAINTEXT://{self._get_network_alias()}:{self.port},BROKER://$(hostname -i | cut -d' ' -f1):9092"
    data = (
        dedent(
            f"""
            #!/bin/bash
            {self.boot_command}
            export KAFKA_ADVERTISED_LISTENERS={listeners}
            . /etc/confluent/docker/bash-config
            /etc/confluent/docker/configure
            /etc/confluent/docker/launch
            """
        )
        .strip()
        .encode("utf-8")
    )
    self.create_file(data, KafkaContainer.TC_START_SCRIPT)

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par KafkaContainer.tc_start et comparez ses hypothèses concernant le réseau de l’hôte avec la configuration de Network présentée dans l’issue. Suivez l’interaction entre _get_network_alias, get_bootstrap_server et le script de démarrage du conteneur. Le travail est terminé lorsque KafkaContainer démarre correctement sur un Network et que get_bootstrap_server renvoie un bootstrap server utilisable.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
docker, kafka, python
Domaine
distributed-systems, networking
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.