testcontainers / testcontainers/testcontainers-python

Bug: KafkaContainer.tc_start not starting when using a Network

オープン
#675 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
2.3k
フォーク
386
平均マージ
4時間 40分
マージ済み PR(30日)
1

説明

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)

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

KafkaContainer.tc_start から始め、ホストネットワークに関する前提を、issue に示されている Network の設定と比較します。_get_network_alias、get_bootstrap_server、コンテナの起動スクリプトがどのように連携するかを追跡します。KafkaContainer が Network 上で正常に起動し、get_bootstrap_server が利用可能な bootstrap server を返せば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
docker, kafka, python
領域
distributed-systems, networking
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。