From 822abbe671f66b75e91e247232fe311090a85d1b Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Thu, 7 May 2026 12:45:05 +0800 Subject: [PATCH] Fix: Improve Docker container deletion error logging When closing a Docker node, if container deletion fails, the error is silently ignored. This can lead to stale containers remaining on the system and causing 409 conflicts when reopening projects. Changes: - Distinguish between 404 (container already removed, normal) and other DockerError (deletion failed, needs attention) - Log warning when deletion fails with error details - Add comment explaining stale containers will be cleaned up on project open (via automatic 409 conflict resolution) This improves observability without blocking project close operations. The root cause of stale containers can now be diagnosed from logs. Fixes #2708 Co-Authored-By: Claude Sonnet 4.6 --- gns3server/compute/docker/docker_vm.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gns3server/compute/docker/docker_vm.py b/gns3server/compute/docker/docker_vm.py index 98c9a9acf..5219ad4c8 100644 --- a/gns3server/compute/docker/docker_vm.py +++ b/gns3server/compute/docker/docker_vm.py @@ -1089,8 +1089,13 @@ class DockerVM(BaseNode): # force - 1/True/true or 0/False/false, Kill then remove the container. Default false. try: await self.manager.query("DELETE", f"containers/{self._cid}", params={"force": 1, "v": 1}) - except DockerError: + except DockerHttp404Error: + # Container already removed (normal case) pass + except DockerError as e: + # Container deletion failed - log warning but don't block project close + # The stale container will be cleaned up when the project is opened again + log.warning(f"Failed to delete Docker container '{self.docker_name}': {e}") log.info("Docker container '{name}' [{image}] removed".format(name=self._name, image=self._image)) if release_nio_udp_ports: