Open sauladam opened 1 month ago
The timeout in question is the sock_read
timeout in aiohttp
.
It can be set via the session
parameter while instantiating a new docker client:
client = aiodocker.Docker(
session=aiohttp.ClientSession(
connector=aiohttp.UnixConnector('/var/run/docker.sock'),
timeout=aiohttp.ClientTimeout(total=None, connect=30, sock_connect=30, sock_read=None)
)
)
@toerb My guy just stepping in and dropping the solution like a chad!
12 hours in and the logs keep coming - thanks a ton! 🫶
This seems like a solid default for handling streaming logs with UnixConnectors. From what I can tell, the timeout can be adjusted per request, so setting it for the log requests makes sense. Would you mind if I opened a PR for this, giving you full credit for your solution?
Would you mind if I opened a PR for this, giving you full credit for your solution?
No, not at all! I am happy my comment was of help ;)
Long story short
Streaming logs for a container works fine for exactly 5 minutes before the process times out. This seems to be an HTTP timeout, probably a default value in aiohttp.
How to reproduce
Let it cook for 5 minutes.
Sidenote:
Subscribing to docker events works fine.
I also went sourcediving and found the
logs
property on theDockerContainer
class which is aDockerLog
instance.I then tried to do the same as with docker events:
But this also times out after 5 minutes.
Your environment
Python 3.12.6 (inside Docker container from
python:3.12-alpine3.19
) aiodocker==0.23.0 aiohttp==3.9.5 (clamped because of an issue with newer versions)