From 6a270aa1f78f9dfeb67374a86786b657481fb92d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Tue, 23 Sep 2025 11:18:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker-exec-via-sock):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20curl=20=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=91=BD=E4=BB=A4=E6=89=A7=E8=A1=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-exec-via-sock.sh | 50 +++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/docker-exec-via-sock.sh b/docker-exec-via-sock.sh index f0fd3fd..dc3c20d 100644 --- a/docker-exec-via-sock.sh +++ b/docker-exec-via-sock.sh @@ -63,7 +63,7 @@ docker_exec_create() { Cmd: ["sh", "-c", $cmd] }') - DOCKER_LAST_RESPONSE=$(curl --fail --silent --show-error --unix-socket "$DOCKER_SOCKET" \ + DOCKER_LAST_RESPONSE=$(curl --silent --show-error --unix-socket "$DOCKER_SOCKET" \ -X POST \ -H "Content-Type: application/json" \ -d "$docker_exec_create_payload" \ @@ -82,37 +82,25 @@ docker_exec_create() { docker_exec_start() { docker_exec_start_id=$1 - docker_exec_start_desc=$2 docker_exec_start_endpoint="${docker_api_base}/exec/${docker_exec_start_id}/start" - DOCKER_LAST_RESPONSE=$(curl --show-error --silent --unix-socket "$DOCKER_SOCKET" \ + + DOCKER_LAST_RESPONSE=$(curl --silent --show-error --unix-socket "$DOCKER_SOCKET" \ -X POST \ -H "Content-Type: application/json" \ -d '{"Detach": false, "Tty": true}' \ - "$docker_exec_start_endpoint") || true - - # 检查 exec 实例的退出码 - exit_code=$(docker_exec_exit_code "$docker_exec_start_id") - - # 如果退出码不是 0,说明命令执行失败 - if [ "$exit_code" != "0" ]; then - log "command execution failed with exit code $exit_code." - log "output from container:" - # 直接打印从容器收到的原始输出 - printf '%s\n' "$DOCKER_LAST_RESPONSE" - return 1 - fi - - log_stream "$docker_exec_start_desc output" "$DOCKER_LAST_RESPONSE" + "$docker_exec_start_endpoint") + printf '%s' "$DOCKER_LAST_RESPONSE" } docker_exec_exit_code() { docker_exec_exit_id=$1 docker_exec_inspect_endpoint="${docker_api_base}/exec/${docker_exec_exit_id}/json" - DOCKER_LAST_RESPONSE=$(curl --fail --silent --show-error --unix-socket "$DOCKER_SOCKET" "$docker_exec_inspect_endpoint") - docker_exec_exit_code_value=$(printf '%s' "$DOCKER_LAST_RESPONSE" | jq -r '.ExitCode // empty') + DOCKER_LAST_RESPONSE=$(curl --silent --show-error --unix-socket "$DOCKER_SOCKET" "$docker_exec_inspect_endpoint") + docker_exec_exit_code_value=$(printf '%s' "$DOCKER_LAST_RESPONSE" | jq -r '.ExitCode') - if [ -z "$docker_exec_exit_code_value" ]; then + if [ "$docker_exec_exit_code_value" = "null" ]; then + log "failed to get exit code. response: $DOCKER_LAST_RESPONSE" return 1 fi @@ -194,15 +182,23 @@ exec_create_endpoint="${docker_api_base}/containers/${CONTAINER_NAME}/exec" log "executing command in container '$CONTAINER_NAME': $CMD_TO_EXEC" -if ! exec_id=$(docker_exec_create "command" "$CMD_TO_EXEC"); then +exec_id=$(docker_exec_create "command" "$CMD_TO_EXEC") +if [ -z "$exec_id" ]; then exit 1 fi log "starting exec $exec_id" -# docker_exec_start 会处理成功和失败的逻辑,并记录日志 -if ! docker_exec_start "$exec_id" "exec"; then - exit 1 -fi +output=$(docker_exec_start "$exec_id") +exit_code=$(docker_exec_exit_code "$exec_id") -log "command finished successfully" \ No newline at end of file +if [ "$exit_code" = "0" ]; then + log "command finished successfully" + log_stream "output" "$output" + exit 0 +else + log "command failed with exit code $exit_code" + log "output from container:" + printf '%s\n' "$output" + exit "$exit_code" +fi \ No newline at end of file