From ea3f9f3b53354f23204f4f7067eb1ce59c2a11b0 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 8 Sep 2026 16:01:48 -0600 Subject: [PATCH] fix(server-health): detect custom default-address-pools via docker info /etc/docker/daemon.json isn't mounted into the dokploy container, only docker.sock is, so cat-ing it always failed silently. Read the effective config over the already-mounted socket instead. Fixes #5383 --- packages/server/src/services/server-health.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/server/src/services/server-health.ts b/packages/server/src/services/server-health.ts index a7d5a21a2..18722fba1 100644 --- a/packages/server/src/services/server-health.ts +++ b/packages/server/src/services/server-health.ts @@ -118,7 +118,9 @@ diskTotal=$(df -B1 / 2>/dev/null | awk 'NR==2{print $2}'); [ -z "$diskTotal" ] & diskUsed=$(df -B1 / 2>/dev/null | awk 'NR==2{print $3}'); [ -z "$diskUsed" ] && diskUsed=0 networkCount=$(docker network ls -q 2>/dev/null | wc -l | tr -d ' ') -daemonConfigB64=$(cat /etc/docker/daemon.json 2>/dev/null | base64 2>/dev/null | tr -d '\\n') +# /etc/docker/daemon.json isn't mounted into the dokploy container (only docker.sock is), so read +# the effective config over the socket instead of the file. +daemonConfigB64=$(docker info --format '{{json .DefaultAddressPools}}' 2>/dev/null | base64 2>/dev/null | tr -d '\\n') daemonLogsToEpoch=$(date +%s 2>/dev/null); [ -z "$daemonLogsToEpoch" ] && daemonLogsToEpoch=0 daemonLogsFromEpoch=$((daemonLogsToEpoch - ${sinceHours} * 3600)) @@ -319,11 +321,11 @@ export const getServerHealth = async ( .filter(Boolean); let addressPools: unknown = null; - const daemonConfigText = b64Decode(parsed.daemonConfigBase64); + const daemonConfigText = b64Decode(parsed.daemonConfigBase64).trim(); if (daemonConfigText) { try { - addressPools = - JSON.parse(daemonConfigText)?.["default-address-pools"] ?? null; + // `docker info` already returns the pools array (or `null`) directly, unlike daemon.json. + addressPools = JSON.parse(daemonConfigText) ?? null; } catch { addressPools = null; }