testcontainers / testcontainers/testcontainers-python
Feature: Timeout on command execution
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 2.3k
- Fork
- 386
- Merge trung bình
- 4 giờ 40 phút
- Pull request đã merge (30 ngày)
- 1
Mô tả
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.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu từ DockerContainer.exec và docs/features/executing_commands.md, sau đó so sánh ví dụ timeout được ghi trong tài liệu với docker-py Container.exec_run và các hạn chế của nó. Hoàn thành khi exec() chấp nhận một timeout, phát sinh TimeoutError khi vượt quá thời hạn và không khiến test run bị chặn vô thời hạn.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- docker, python
- Lĩnh vực
- devops, testing
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100