diff --git a/changes/11228.fix.md b/changes/11228.fix.md new file mode 100644 index 00000000000..ee0746c0190 --- /dev/null +++ b/changes/11228.fix.md @@ -0,0 +1 @@ +Fix a leaked aiodocker session in `DockerKernel.commit()` by scoping the client via `closing_async`. diff --git a/src/ai/backend/agent/docker/kernel.py b/src/ai/backend/agent/docker/kernel.py index 6b2d96e1419..0a6f0e09574 100644 --- a/src/ai/backend/agent/docker/kernel.py +++ b/src/ai/backend/agent/docker/kernel.py @@ -221,8 +221,7 @@ def _write_chunks( try: async with FileLock(path=lock_path, timeout=0.1, remove_when_unlock=True): log.info("Container (k: {}) is being committed", kernel_id) - docker = Docker() - try: + async with closing_async(Docker()) as docker: # There is a known issue at certain versions of Docker Engine # which prevents container from being committed when request config body is empty # https://github.com/moby/moby/issues/45543 @@ -289,8 +288,6 @@ def _write_chunks( await write_task finally: await docker.images.delete(image_id) - finally: - await docker.close() except TimeoutError: log.warning("Session is already being committed.")