From 2568aaa0f21d4daf7f614eeaac63f12b11885552 Mon Sep 17 00:00:00 2001 From: casjay Date: Sun, 31 May 2026 00:34:21 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20entrypoint=20arg=20passthr?= =?UTF-8?q?ough=20=E2=80=94=20commands=20no=20longer=20hang=20=F0=9F=90=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: entrypoint.sh unconditionally called `__no_exit` (an `exec bash -c` monitoring loop) even when the user passed a command to `docker run`, replacing the shell before the command could execute. Secondary bug in `__exec_command`: used `bash --login -c "$cmdExec"` which only captured the first word of the command and spawned a slow login shell on every invocation. - rootfs/usr/local/bin/entrypoint.sh: only call `__no_exit` when no user command was given (`$# -eq 0`); otherwise fall through to the case dispatch so `docker run ... go version` works correctly - rootfs/usr/local/etc/docker/functions/entrypoint.sh: rewrite `__exec_command` to use `exec "$@"` directly instead of wrapping in `bash --login -c "$cmdExec"`; both files kept in sync rootfs/usr/local/bin/entrypoint.sh rootfs/usr/local/etc/docker/functions/entrypoint.sh --- rootfs/usr/local/bin/entrypoint.sh | 8 +++++--- .../local/etc/docker/functions/entrypoint.sh | 18 +++++++----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/rootfs/usr/local/bin/entrypoint.sh b/rootfs/usr/local/bin/entrypoint.sh index 587f151..2da550d 100755 --- a/rootfs/usr/local/bin/entrypoint.sh +++ b/rootfs/usr/local/bin/entrypoint.sh @@ -506,9 +506,11 @@ if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]; then echo "$$" >"$ENTRYPOINT_PID_FILE" __start_init_scripts "/usr/local/etc/docker/init.d" CONTAINER_INIT="${CONTAINER_INIT:-no}" - # Services started successfully - enter monitoring mode - __no_exit - exit $? + # Only block in monitoring mode when no user command was given + if [ $# -eq 0 ]; then + __no_exit + exit $? + fi fi START_SERVICES="no" fi diff --git a/rootfs/usr/local/etc/docker/functions/entrypoint.sh b/rootfs/usr/local/etc/docker/functions/entrypoint.sh index e83485d..88c74a7 100644 --- a/rootfs/usr/local/etc/docker/functions/entrypoint.sh +++ b/rootfs/usr/local/etc/docker/functions/entrypoint.sh @@ -885,23 +885,19 @@ __create_env_file() { } # - - - - - - - - - - - - - - - - - - - - - - - - - __exec_command() { - local arg=("$@") local exitCode=0 - local cmdExec="${arg:-}" - local pre_exec="--login -c" - local shell bin prog - shell=$(type -P bash || type -P dash || type -P ash || type -P sh) 2>/dev/null - bin="${arg[0]:-bash}" + local bin="${1:-bash}" + local prog prog="$(type -P "$bin" 2>/dev/null || echo "$bin")" - if type -t "$bin" &>/dev/null; then - echo "${exec_message:-Executing command: $cmdExec}" - "$shell" $pre_exec "$cmdExec" + if [ -x "$prog" ]; then + echo "${exec_message:-Executing: $*}" + exec "$@" exitCode=$? elif [ -f "$prog" ]; then - echo "$prog is not executable" + echo "Error: $prog is not executable" >&2 exitCode=98 else - echo "$prog does not exist" + echo "Error: command not found: $bin" >&2 exitCode=99 fi return $exitCode