testcontainers / testcontainers/testcontainers-python
Bug: Failure to connect to Reaper leaves stale ryuk containers, leading to container name collisions
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
Describe the bug
Running testcontainers in a network-isolated environment leaves stale ryuk containers. Further down this produces misleading error messages about duplicate containers.
Reaper._create_instancestarts a new ryuk containerReaper._create_instancefails to connect to the reaper container.
Line 372s.connect((container_host, container_port))raisesConnectionRefusedError: [Errno 111] Connection refusedReaper._create_instanceleaves the container running, without assigning it toReaper._instance- Test fails with
Connection refusederror message above - Next test starts
Reaper._create_instanceattempts starting a new ryuk container. Fails with misleading error message:requests.exceptions.HTTPError: 409 Client Error: Conflict for url: http+docker://localhost/v1.55/containers/create?name=testcontainers-ryuk-6810abc7-a781-44ec-928a-2c671c8881d9. Normally this should reuse theReaper._instancebut since it was never assigned it will not realize that it is already running. The unique ID is only generated once per session.- Second test fails with the misleading message about duplicate ryuk containers.
To Reproduce
Run a pytest suite having at least 2 tests attempting to use testcontainers in a network-isolated environment, such as Bazel with tags=["block-network"]
BUILD.bazel
load("@rules_python//python:defs.bzl", "py_test")
py_test(
name = "test_ryuk_repro",
srcs = ["test_ryuk_repro.py"],
tags = ["block-network"],
deps = [
"@pip//pytest:pkg",
"@pip//testcontainers:pkg",
],
)
test_ryuk_repro.py
import pytest
from testcontainers.core.container import DockerContainer
def test_a():
with DockerContainer("hello-world"): # Fails with ConnectionError
pass
def test_b():
with DockerContainer("hello-world"): # Fails with 409 Conflict error
pass
Runtime environment
Provide a summary of your runtime environment. Which operating system, python version, and docker version are you using? What is the version of testcontainers-python you are using? You can run the following commands to get the relevant information.
# Get the operating system information (on a unix os).
$ uname -a
Linux ... 7.0.0-27-generic #27-Ubuntu SMP PREEMPT_DYNAMIC Thu Jun 18 19:13:49 UTC 2026 x86_64 GNU/Linux
# Get the python version.
$ python --version
3.11
$ docker info
Client: Docker Engine - Community
Version: 29.6.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.35.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v5.3.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
$ pip freeze
testcontainers==4.14.2
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in Reaper._create_instance, insbesondere bei der Verbindung in Zeile 372, und reproduziere den Fehler mit dem pytest-Beispiel mit zwei Tests in einer netzwerkisolierten Umgebung. Verfolge, was passiert, wenn die Verbindung abgelehnt wird, und stelle sicher, dass ein späterer Test nicht auf einen veralteten ryuk-Container oder einen irreführenden 409-Fehler wegen eines Namenskonflikts trifft.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- docker, python
- Bereich
- testing
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 72/100