From b0cf08dd424cd258e320fad02adfe56b375e22f9 Mon Sep 17 00:00:00 2001 From: Alexej Penner Date: Tue, 24 Jun 2025 13:54:17 +0200 Subject: [PATCH 1/2] Stop bothering me with logs about docker daemon --- .../services/container/container_service.py | 8 ++++++++ .../deploy/docker/docker_provider.py | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/zenml/services/container/container_service.py b/src/zenml/services/container/container_service.py index 4b8e0e6d094..01dcdb7eaf6 100644 --- a/src/zenml/services/container/container_service.py +++ b/src/zenml/services/container/container_service.py @@ -39,6 +39,7 @@ create_dir_recursive_if_not_exists, get_global_config_directory, ) +from zenml.utils.docker_utils import check_docker logger = get_logger(__name__) @@ -217,6 +218,13 @@ def check_status(self) -> Tuple[ServiceState, str]: providing additional information about that state (e.g. a description of the error, if one is encountered). """ + # Check if Docker is available first + if not check_docker(): + return ( + ServiceState.INACTIVE, + "Docker daemon is not running" + ) + container: Optional[Container] = None try: container = self.docker_client.containers.get(self.container_id) diff --git a/src/zenml/zen_server/deploy/docker/docker_provider.py b/src/zenml/zen_server/deploy/docker/docker_provider.py index e77a6082af6..2c97a92eaa0 100644 --- a/src/zenml/zen_server/deploy/docker/docker_provider.py +++ b/src/zenml/zen_server/deploy/docker/docker_provider.py @@ -14,6 +14,7 @@ """Zen Server docker deployer implementation.""" import shutil +import os from typing import ClassVar, Optional, Tuple, Type, cast from uuid import uuid4 @@ -39,6 +40,7 @@ DockerZenServer, DockerZenServerConfig, ) +from zenml.utils.docker_utils import check_docker logger = get_logger(__name__) @@ -253,6 +255,22 @@ def _get_service(self) -> BaseService: Raises: KeyError: If the server deployment is not found. """ + # Check if Docker is available first + if not check_docker(): + # Docker is not available, so we can't have a running Docker service + # Clean up the stale service configuration + service_config_path = DockerZenServer.config_path() + if os.path.exists(service_config_path): + logger.warning( + "Docker daemon is not running. Cleaning up stale Docker " + "ZenML server configuration at %s", service_config_path + ) + try: + shutil.rmtree(service_config_path) + except Exception as e: + logger.debug("Failed to clean up stale Docker config: %s", e) + raise KeyError("The docker ZenML server is not deployed (Docker daemon not running).") + service = DockerZenServer.get_service() if service is None: raise KeyError("The docker ZenML server is not deployed.") From 1c0a04be0758fd8b284e33d4cba745a5a48dfbb4 Mon Sep 17 00:00:00 2001 From: Alexej Penner Date: Tue, 24 Jun 2025 13:57:35 +0200 Subject: [PATCH 2/2] Linted and formatted --- .../services/container/container_service.py | 9 +++------ .../zen_server/deploy/docker/docker_provider.py | 17 +++++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/zenml/services/container/container_service.py b/src/zenml/services/container/container_service.py index 01dcdb7eaf6..2223cf58637 100644 --- a/src/zenml/services/container/container_service.py +++ b/src/zenml/services/container/container_service.py @@ -35,11 +35,11 @@ from zenml.services.service import BaseService, ServiceConfig from zenml.services.service_status import ServiceStatus from zenml.utils import docker_utils +from zenml.utils.docker_utils import check_docker from zenml.utils.io_utils import ( create_dir_recursive_if_not_exists, get_global_config_directory, ) -from zenml.utils.docker_utils import check_docker logger = get_logger(__name__) @@ -220,11 +220,8 @@ def check_status(self) -> Tuple[ServiceState, str]: """ # Check if Docker is available first if not check_docker(): - return ( - ServiceState.INACTIVE, - "Docker daemon is not running" - ) - + return (ServiceState.INACTIVE, "Docker daemon is not running") + container: Optional[Container] = None try: container = self.docker_client.containers.get(self.container_id) diff --git a/src/zenml/zen_server/deploy/docker/docker_provider.py b/src/zenml/zen_server/deploy/docker/docker_provider.py index 2c97a92eaa0..9fe6df50054 100644 --- a/src/zenml/zen_server/deploy/docker/docker_provider.py +++ b/src/zenml/zen_server/deploy/docker/docker_provider.py @@ -13,8 +13,8 @@ # permissions and limitations under the License. """Zen Server docker deployer implementation.""" -import shutil import os +import shutil from typing import ClassVar, Optional, Tuple, Type, cast from uuid import uuid4 @@ -31,6 +31,7 @@ ServiceEndpointHealthMonitorConfig, ServiceEndpointProtocol, ) +from zenml.utils.docker_utils import check_docker from zenml.zen_server.deploy.base_provider import BaseServerProvider from zenml.zen_server.deploy.deployment import LocalServerDeploymentConfig from zenml.zen_server.deploy.docker.docker_zen_server import ( @@ -40,7 +41,6 @@ DockerZenServer, DockerZenServerConfig, ) -from zenml.utils.docker_utils import check_docker logger = get_logger(__name__) @@ -263,14 +263,19 @@ def _get_service(self) -> BaseService: if os.path.exists(service_config_path): logger.warning( "Docker daemon is not running. Cleaning up stale Docker " - "ZenML server configuration at %s", service_config_path + "ZenML server configuration at %s", + service_config_path, ) try: shutil.rmtree(service_config_path) except Exception as e: - logger.debug("Failed to clean up stale Docker config: %s", e) - raise KeyError("The docker ZenML server is not deployed (Docker daemon not running).") - + logger.debug( + "Failed to clean up stale Docker config: %s", e + ) + raise KeyError( + "The docker ZenML server is not deployed (Docker daemon not running)." + ) + service = DockerZenServer.get_service() if service is None: raise KeyError("The docker ZenML server is not deployed.")