testcontainers / testcontainers/testcontainers-python
Bug: KafkaContainer.tc_start not starting when using a Network
オープン
まだ誰も着手していません。
- 主要言語
- 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)
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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