From 0576b4862ffbddf6fad5a99625bd2d94f7cf9bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Tue, 23 Sep 2025 11:12:49 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker-exec-via-sock):=20=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E6=89=A7=E8=A1=8C=E5=A4=B1=E8=B4=A5=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA=E4=B8=8E=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-exec-via-sock.sh | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/docker-exec-via-sock.sh b/docker-exec-via-sock.sh index 9547ec0..347819e 100644 --- a/docker-exec-via-sock.sh +++ b/docker-exec-via-sock.sh @@ -84,12 +84,21 @@ 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" - if ! DOCKER_LAST_RESPONSE=$(curl --fail --show-error --silent --unix-socket "$DOCKER_SOCKET" \ + DOCKER_LAST_RESPONSE=$(curl --show-error --silent --unix-socket "$DOCKER_SOCKET" \ -X POST \ -H "Content-Type: application/json" \ -d '{"Detach": false, "Tty": true}' \ - "$docker_exec_start_endpoint"); then - log "command execution failed. output from container: $DOCKER_LAST_RESPONSE" + "$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 @@ -191,21 +200,9 @@ fi log "starting exec $exec_id" -if ! start_output=$(docker_exec_start "$exec_id" "exec"); then - # The error is already logged inside docker_exec_start +# docker_exec_start 会处理成功和失败的逻辑,并记录日志 +if ! docker_exec_start "$exec_id" "exec"; then exit 1 fi -if ! exit_code=$(docker_exec_exit_code "$exec_id"); then - error_message=$(printf '%s' "$DOCKER_LAST_RESPONSE" | jq -r '.message // "unknown error"') - log "could not determine exec exit code: $error_message" - exit 1 -fi - -if [ "$exit_code" != "0" ]; then - log "exec exited with status $exit_code" - log "docker inspect response: $DOCKER_LAST_RESPONSE" - exit "$exit_code" -fi - log "command finished successfully" \ No newline at end of file