fix(docker-exec-via-sock): 改进命令执行失败时的日志输出与错误处理

This commit is contained in:
严浩
2025-09-23 11:12:49 +08:00
parent 020859ff16
commit 0576b4862f

View File

@@ -84,12 +84,21 @@ docker_exec_start() {
docker_exec_start_id=$1 docker_exec_start_id=$1
docker_exec_start_desc=$2 docker_exec_start_desc=$2
docker_exec_start_endpoint="${docker_api_base}/exec/${docker_exec_start_id}/start" 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 \ -X POST \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"Detach": false, "Tty": true}' \ -d '{"Detach": false, "Tty": true}' \
"$docker_exec_start_endpoint"); then "$docker_exec_start_endpoint") || true
log "command execution failed. output from container: $DOCKER_LAST_RESPONSE"
# 检查 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 return 1
fi fi
@@ -191,21 +200,9 @@ fi
log "starting exec $exec_id" log "starting exec $exec_id"
if ! start_output=$(docker_exec_start "$exec_id" "exec"); then # docker_exec_start 会处理成功和失败的逻辑,并记录日志
# The error is already logged inside docker_exec_start if ! docker_exec_start "$exec_id" "exec"; then
exit 1 exit 1
fi 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" log "command finished successfully"