fix(docker-exec-via-sock): 改进命令执行失败时的日志输出与错误处理
This commit is contained in:
@@ -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"
|
||||
Reference in New Issue
Block a user