diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index 8abdc3fe9..4dafa5636 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -2067,9 +2067,17 @@ func ignoreTerminateErrors(err error) error { if err == nil { return nil } + // terminate() might return an error from ether Kill or Wait. + // The (*Cmd).Wait documentation says: "If the command fails to run + // or doesn't complete successfully, the error is of type *ExitError". + // Filter out such errors (like "exit status 1" or "signal: killed"). + var exitErr *exec.ExitError + if errors.As(err, &exitErr) { + return nil + } + s := err.Error() - if strings.Contains(s, "signal: killed") || - strings.Contains(s, "process already finished") || + if strings.Contains(s, "process already finished") || strings.Contains(s, "Wait was already called") { return nil }