From 7aea5f63ed269c4365691b2b5ed83dc1a984febf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0albaba?= Date: Wed, 22 Apr 2026 22:19:19 +0200 Subject: [PATCH] Refactor container runtime detection and fix Podman-as-Docker defaults HHH-20358 - Refactored logic to explicitly identify Docker, Podman, and Podman aliased as Docker. - Fixed a bug where PRIVILEGED_CLI was not set to "sudo" when Podman was aliased as Docker. - Centralized setting of runtime-specific defaults - Added an error check and exit if no valid runtime is found on PATH. - Fixed a HEALTCHECK -> HEALTHCHECK typo --- docker_db.sh | 77 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/docker_db.sh b/docker_db.sh index b82e273b1156..cddca5442b93 100755 --- a/docker_db.sh +++ b/docker_db.sh @@ -1,13 +1,30 @@ #! /bin/bash +# Detect container runtime if command -v docker > /dev/null; then CONTAINER_CLI=$(command -v docker) - HEALTCHECK_PATH="{{.State.Health.Status}}" - PRIVILEGED_CLI="" -else + if [[ "$(docker version | grep Podman)" == "" ]]; then + IS_DOCKER_RUNTIME=true + IS_PODMAN=false + else + IS_DOCKER_RUNTIME=false + IS_PODMAN=true + fi +elif command -v podman > /dev/null; then CONTAINER_CLI=$(command -v podman) - HEALTCHECK_PATH="{{.State.Healthcheck.Status}}" - # Only use sudo for podman + IS_DOCKER_RUNTIME=false + IS_PODMAN=true +else + echo "ERROR: Neither docker nor podman found on PATH" + exit 1 +fi + +# Set runtime-specific defaults +if [[ "$IS_DOCKER_RUNTIME" == "true" ]]; then + HEALTHCHECK_PATH="{{.State.Health.Status}}" + PRIVILEGED_CLI="" +elif [[ "$IS_PODMAN" == "true" ]]; then + HEALTHCHECK_PATH="{{.State.Healthcheck.Status}}" if command -v sudo > /dev/null; then PRIVILEGED_CLI="sudo" else @@ -560,7 +577,7 @@ oracle_setup() { if ! command -v docker > /dev/null; then $PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null fi - HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle`" + HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTHCHECK_PATH oracle`" HEALTHSTATUS=${HEALTHSTATUS##+( )} #Remove longest matching series of spaces from the front HEALTHSTATUS=${HEALTHSTATUS%%+( )} #Remove longest matching series of spaces from the back done @@ -640,7 +657,7 @@ oracle_free_setup() { if ! command -v docker > /dev/null; then $PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null fi - HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle`" + HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTHCHECK_PATH oracle`" HEALTHSTATUS=${HEALTHSTATUS##+( )} #Remove longest matching series of spaces from the front HEALTHSTATUS=${HEALTHSTATUS%%+( )} #Remove longest matching series of spaces from the back done @@ -710,28 +727,30 @@ EOF\"" } disable_userland_proxy() { - if [[ "$HEALTCHECK_PATH" == "{{.State.Health.Status}}" ]]; then - if [[ ! -f /etc/docker/daemon.json ]]; then - echo "Didn't find /etc/docker/daemon.json but need to disable userland-proxy..." - echo "Stopping docker..." - sudo service docker stop - echo "Creating /etc/docker/daemon.json..." - sudo bash -c "echo '{\"userland-proxy\": false}' > /etc/docker/daemon.json" - echo "Starting docker..." - sudo service docker start - echo "Docker successfully started with userland proxies disabled" - elif ! grep -q userland-proxy /etc/docker/daemon.json; then - echo "Userland proxy is still enabled in /etc/docker/daemon.json, but need to disable it..." - export docker_daemon_json=$( /etc/docker/daemon.json" - echo "Starting docker..." - sudo service docker start - echo "Service status:" - sudo journalctl -xeu docker.service - echo "Docker successfully started with userland proxies disabled" + if [[ "$IS_DOCKER_RUNTIME" == "true" ]]; then + if [[ "$HEALTHCHECK_PATH" == "{{.State.Health.Status}}" ]]; then + if [[ ! -f /etc/docker/daemon.json ]]; then + echo "Didn't find /etc/docker/daemon.json but need to disable userland-proxy..." + echo "Stopping docker..." + sudo service docker stop + echo "Creating /etc/docker/daemon.json..." + sudo bash -c "echo '{\"userland-proxy\": false}' > /etc/docker/daemon.json" + echo "Starting docker..." + sudo service docker start + echo "Docker successfully started with userland proxies disabled" + elif ! grep -q userland-proxy /etc/docker/daemon.json; then + echo "Userland proxy is still enabled in /etc/docker/daemon.json, but need to disable it..." + export docker_daemon_json=$( /etc/docker/daemon.json" + echo "Starting docker..." + sudo service docker start + echo "Service status:" + sudo journalctl -xeu docker.service + echo "Docker successfully started with userland proxies disabled" + fi fi fi }