diff --git a/cmd/backup/exec.go b/cmd/backup/exec.go index 1d762f61..baabab50 100644 --- a/cmd/backup/exec.go +++ b/cmd/backup/exec.go @@ -48,12 +48,22 @@ func (s *script) exec(containerRef string, command string, user string) ([]byte, var outBuf, errBuf bytes.Buffer outputDone := make(chan error) + var buf bytes.Buffer + tee := io.TeeReader(resp.Reader, &buf) + go func() { - _, err := stdcopy.StdCopy(&outBuf, &errBuf, resp.Reader) + _, err := stdcopy.StdCopy(&outBuf, &errBuf, tee) outputDone <- err }() if err := <-outputDone; err != nil { + if body, bErr := io.ReadAll(&buf); bErr == nil { + // if possible, try to append the exec output to the error + // as it's likely to be more relevant for users than the error from + // calling stdcopy.Copy + err = errwrap.Wrap(errors.New(string(body)), err.Error()) + return nil, nil, errwrap.Wrap(err, "error demultiplexing output") + } return nil, nil, errwrap.Wrap(err, "error demultiplexing output") }