fix: Configure aiodocker with custom session to disable log timeouts

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-07 14:14:59 -07:00
parent 81bdc71a44
commit e89b578931

14
main.py
View File

@@ -8,6 +8,7 @@ import asyncio
import re import re
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import aiodocker import aiodocker
from aiodocker.connector import DockerConnector
import aiohttp import aiohttp
import random import random
import string import string
@@ -153,8 +154,15 @@ async def main():
Monitors Navidrome container logs for rapid star/unstar events. Monitors Navidrome container logs for rapid star/unstar events.
""" """
docker = None docker = None
session = None
try: try:
docker = aiodocker.Docker() # We need a custom session with no timeout for the long-polling log stream.
# We also need to use aiodocker's connector to handle Unix sockets correctly.
connector = DockerConnector()
timeout = aiohttp.ClientTimeout(total=None, sock_read=None)
session = connector.aiohttp_session(timeout=timeout)
docker = aiodocker.Docker(session=session)
container = await docker.containers.get(settings.NAVIDROME_CONTAINER) container = await docker.containers.get(settings.NAVIDROME_CONTAINER)
logging.info(f"Monitoring logs for container '{settings.NAVIDROME_CONTAINER}'...") logging.info(f"Monitoring logs for container '{settings.NAVIDROME_CONTAINER}'...")
@@ -163,7 +171,6 @@ async def main():
stderr=True, stderr=True,
follow=True, follow=True,
since=datetime.now(timezone.utc).timestamp(), since=datetime.now(timezone.utc).timestamp(),
timeout=0, # Disable timeout for long-polling
) )
async for line in logs: async for line in logs:
@@ -194,7 +201,10 @@ async def main():
logging.exception("An unexpected error occurred") logging.exception("An unexpected error occurred")
finally: finally:
if docker: if docker:
# aiodocker doesn't close sessions it doesn't own.
await docker.close() await docker.close()
if session:
await session.close()
if __name__ == "__main__": if __name__ == "__main__":