fix(docker-exec-via-sock): 调整 curl 请求参数并优化命令执行逻辑
This commit is contained in:
@@ -63,7 +63,7 @@ docker_exec_create() {
|
|||||||
Cmd: ["sh", "-c", $cmd]
|
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 \
|
-X POST \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$docker_exec_create_payload" \
|
-d "$docker_exec_create_payload" \
|
||||||
@@ -82,37 +82,25 @@ docker_exec_create() {
|
|||||||
|
|
||||||
docker_exec_start() {
|
docker_exec_start() {
|
||||||
docker_exec_start_id=$1
|
docker_exec_start_id=$1
|
||||||
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"
|
||||||
DOCKER_LAST_RESPONSE=$(curl --show-error --silent --unix-socket "$DOCKER_SOCKET" \
|
|
||||||
|
DOCKER_LAST_RESPONSE=$(curl --silent --show-error --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") || true
|
"$docker_exec_start_endpoint")
|
||||||
|
|
||||||
# 检查 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"
|
|
||||||
printf '%s' "$DOCKER_LAST_RESPONSE"
|
printf '%s' "$DOCKER_LAST_RESPONSE"
|
||||||
}
|
}
|
||||||
|
|
||||||
docker_exec_exit_code() {
|
docker_exec_exit_code() {
|
||||||
docker_exec_exit_id=$1
|
docker_exec_exit_id=$1
|
||||||
docker_exec_inspect_endpoint="${docker_api_base}/exec/${docker_exec_exit_id}/json"
|
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_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 // empty')
|
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
|
return 1
|
||||||
fi
|
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"
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "starting exec $exec_id"
|
log "starting exec $exec_id"
|
||||||
|
|
||||||
# docker_exec_start 会处理成功和失败的逻辑,并记录日志
|
output=$(docker_exec_start "$exec_id")
|
||||||
if ! docker_exec_start "$exec_id" "exec"; then
|
exit_code=$(docker_exec_exit_code "$exec_id")
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
if [ "$exit_code" = "0" ]; then
|
||||||
log "command finished successfully"
|
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
|
||||||
Reference in New Issue
Block a user