Feature: Timeout on command execution
Maintainer antworten meist innerhalb von 12 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 42/100
Rechercherichtung
Beginne bei DockerContainer.exec und docs/features/executing_commands.md und vergleiche anschließend das dokumentierte Timeout-Beispiel mit docker-py Container.exec_run und dessen Einschränkungen. Abgeschlossen ist die Aufgabe, wenn exec() ein Timeout akzeptiert, bei Überschreitung der Frist TimeoutError auslöst und den Testlauf nicht auf unbestimmte Zeit blockiert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
What are you trying to do?
The DockerContainer.exec() method does not support a timeout parameter, even though the documentation explicitly describes this functionality:
with GenericContainer("alpine:latest") as container:
try:
exit_code, output = container.exec(
["sleep", "10"],
timeout=5 # Timeout in seconds
)
except TimeoutError:
print("Command timed out")
However, the actual implementation simply forwards to docker-py's exec_run without accepting any additional keyword arguments:
def exec(self, command: Union[str, list[str]]) -> ExecResult:
if not self._container:
raise ContainerStartException("Container should be started before executing a command")
return self._container.exec_run(command)
We'd like exec() to support a timeout so that commands that hang or take too long don't block test runs indefinitely.
Why should it be done this way?
Without a timeout, any exec() call that hangs (e.g. a command waiting on a resource that never becomes available) will block the test process forever with no way to recover other than killing the process externally.
Unfortunately this isn't a simple pass through - the underlying docker-py Container.exec_run() also does not expose a timeout parameter. So this would need a client-side implementation, for example wrapping the call with concurrent.futures.ThreadPoolExecutor and a deadline, or using exec_run(socket=True) with a socket-level timeout.
Just like the timeout for a subprocess.run run doesn't guarantee closing the process after the timeout, so will this.
I'm happy to open a PR for this, but wanted to gain agreement on the issue first before submitting code.
- Vorherrschende Sprache
- Python
- Sterne
- 2.3k
- Forks
- 390
- Ø Merge
- 11 T. 16 Std.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus testcontainers/testcontainers-python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
testcontainers/testcontainers-python#1086 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 12 Tagen
-
Bug: [minio] _healthcheck calls for nested wait_container_is_ready resulting in long wait timeOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
testcontainers/testcontainers-python#578 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 12 Tagen
-
Bug: `Reaper.delete_instance()` raises 409 and keeps the dead reaper when ryuk was killed from outsideEvtl. vergeben @RitiGrover hat das vor 16 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 76/100
testcontainers/testcontainers-python#1125 ·
Maintainer antworten meist innerhalb von 12 Tagen
-
Bug: MongoDB container is reported ready before the server accepts connectionsEvtl. vergeben @RitiGrover hat das vor 19 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 65/100
testcontainers/testcontainers-python#1122 ·
Maintainer antworten meist innerhalb von 12 Tagen
-
Bug: Reaper reports success while the session filter never reaches Ryuk (silent leak on Linux/docker-proxy)Evtl. vergeben @RitiGrover hat das vor 19 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
testcontainers/testcontainers-python#1114 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 12 Tagen
Alle Issues in testcontainers/testcontainers-python
Ähnliche Issues
-
python triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
microsoft/semantic-kernel#14590 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
pinterest/pymemcache#662 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 62/100
gnocchixyz/gnocchi#1527 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
tenstorrent/tt-model-manager#181 ·
Maintainer antworten meist innerhalb von 1 Tag