testcontainers / testcontainers/testcontainers-python

Bug: KafkaContainer.tc_start not starting when using a Network

Offen
#675 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
2.3k
Forks
386
Ø Merge
4 Std. 40 Min.
Gemergte PRs (30 T.)
1

Beschreibung

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)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei KafkaContainer.tc_start und vergleiche dessen Annahmen zur Host-Netzwerkkonfiguration mit dem im Issue gezeigten Network-Setup. Verfolge, wie _get_network_alias, get_bootstrap_server und das Container-Startskript miteinander interagieren. Die Aufgabe ist abgeschlossen, wenn KafkaContainer erfolgreich auf einem Network startet und get_bootstrap_server einen nutzbaren Bootstrap-Server zurückgibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
docker, kafka, python
Bereich
distributed-systems, networking
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.