testcontainers / testcontainers/testcontainers-python
Question: Cannot start KafkaContainer() (on windows(?))
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
I am trying to create a KafkaContainer for my integration test, but I have issues starting it.
Using testcontainers==4.12.0, the following snippet has no issues:
from testcontainers.kafka import KafkaContainer
kafka_container = KafkaContainer()
kafka_container.start()
kafka_bootstrap_servers = cls.kafka_container.get_bootstrap_server()
However, upgrading to testcontainers==4.14.2, the same snippet gives the following issue:
Traceback (most recent call last):
File "...\test.py", line 42, in setUpClass
cls.kafka_container.start()
File "...\env\Lib\site-packages\testcontainers\kafka\__init__.py", line 192, in start
self.tc_start()
File "...\env\Lib\site-packages\testcontainers\kafka\__init__.py", line 165, in tc_start
port = self.get_exposed_port(self.port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\env\Lib\site-packages\testcontainers\core\container.py", line 251, in get_exposed_port
return self._get_exposed_port(port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\env\Lib\site-packages\testcontainers\core\container.py", line 257, in _get_exposed_port
return int(self.get_docker_client().port(c.id, port))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\env\Lib\site-packages\testcontainers\core\docker_client.py", line 170, in port
raise ConnectionError(f"Port mapping for container {container_id} and port {port} is not available")
ConnectionError: Port mapping for container 06001694f7ed34dac7f89c4f3a3488d23a884338ec2cc8b367120c2452d39382 and port 9093 is not available
I did a simple investigation and found out that the waiting logic has changed between these two tags. When I use tag 13.0 and 13.1, there is a "legacy deprecation warning" but KafkaContainer can still be started.
...\test.py:40: DeprecationWarning: The wait_for_logs function with string or callable predicates is deprecated and will be removed in a future version. Use structured wait strategies instead: container.waiting_for(LogMessageWaitStrategy('ready')) or container.waiting_for(LogMessageWaitStrategy(re.compile(r'pattern')))
wait_for_logs(cls.kafka_container, "started")
Specifically, the ConnectionError I mentioned above occurred when I upgraded 13.1 to 13.2. The changes I suspect could cause this would be this line
Not sure if this is caused by wrong usage of the library or my personal setup. It is worth noting that I have to disable Ryuk when running the code snippet (using TESTCONTAINERS_RYUK_DISABLED=true) and I am running the code snippet from Windows cmd.
Let me know if there are more information I could provide to investigate this further
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par testcontainers/kafka/init.py et testcontainers/core/docker_client.py, en vous concentrant sur les changements concernant l’attente et le mappage des ports entre v4.13.1 et v4.13.2. Reproduisez l’extrait fourni de KafkaContainer sous Windows avec Ryuk désactivé, puis vérifiez que le conteneur démarre et que get_bootstrap_server() renvoie un endpoint utilisable.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- docker, kafka, python
- Domaine
- devops, testing-qa
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100