From f4ce1431605297e9a8b9ab078309597dffbb82f5 Mon Sep 17 00:00:00 2001 From: Oleksander Piskun Date: Wed, 4 Jun 2025 10:11:06 +0300 Subject: [PATCH] fix(Podman-HealthCheck): treat empty health status as success. Signed-off-by: Oleksander Piskun --- lib/DeployActions/DockerActions.php | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/DeployActions/DockerActions.php b/lib/DeployActions/DockerActions.php index 73aa7d15..ed656019 100644 --- a/lib/DeployActions/DockerActions.php +++ b/lib/DeployActions/DockerActions.php @@ -803,24 +803,26 @@ public function waitTillContainerStart(string $containerId, DaemonConfig $daemon public function healthcheckContainer(string $containerId, DaemonConfig $daemonConfig, bool $waitForSuccess): bool { $dockerUrl = $this->buildDockerUrl($daemonConfig); - $containerInfo = $this->inspectContainer($dockerUrl, $containerId); - if (!isset($containerInfo['State']['Health']['Status'])) { - return true; // container does not support Healthcheck - } - if (!$waitForSuccess) { - return $containerInfo['State']['Health']['Status'] === 'healthy'; - } - $maxTotalAttempts = 900; + $maxTotalAttempts = $waitForSuccess ? 900 : 1; while ($maxTotalAttempts > 0) { $containerInfo = $this->inspectContainer($dockerUrl, $containerId); - if ($containerInfo['State']['Health']['Status'] === 'healthy') { + if (!isset($containerInfo['State']['Health']['Status'])) { + return true; // container does not support Healthcheck + } + $status = $containerInfo['State']['Health']['Status']; + if ($status === '') { + return true; // we treat empty status as 'success', see https://github.com/nextcloud/app_api/issues/439 + } + if ($status === 'healthy') { return true; } - if ($containerInfo['State']['Health']['Status'] === 'unhealthy') { + if ($status === 'unhealthy') { return false; } $maxTotalAttempts--; - sleep(1); + if ($maxTotalAttempts > 0) { + sleep(1); + } } return false; }