better debugging output in some error cases

from:

2017/03/07 09:59:30 Failed to extract kernel image and tarball

to

2017/03/07 10:06:04 Failed to extract kernel image and tarball: Unable to find image 'mobylinux/kernel:7fa748810d7866797fd807a5682d5cb3c9c98111' locally

Signed-off-by: Tycho Andersen <tycho@docker.com>
This commit is contained in:
Tycho Andersen 2017-03-07 10:06:16 -08:00
parent 7b0bdd485e
commit 437634cab1

34
main.go
View File

@ -4,6 +4,7 @@ import (
"archive/tar" "archive/tar"
"bytes" "bytes"
"errors" "errors"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
@ -26,11 +27,38 @@ func dockerRun(args ...string) ([]byte, error) {
} }
args = append([]string{"run", "--rm"}, args...) args = append([]string{"run", "--rm"}, args...)
cmd := exec.Command(docker, args...) cmd := exec.Command(docker, args...)
out, err := cmd.Output()
stderrPipe, err := cmd.StderrPipe()
if err != nil { if err != nil {
return []byte{}, err return []byte{}, err
} }
return out, nil
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
return []byte{}, err
}
err = cmd.Start()
if err != nil {
return []byte{}, err
}
stdout, err := ioutil.ReadAll(stdoutPipe)
if err != nil {
return []byte{}, err
}
stderr, err := ioutil.ReadAll(stderrPipe)
if err != nil {
return []byte{}, err
}
err = cmd.Wait()
if err != nil {
return []byte{}, fmt.Errorf("%s: %s", err, stderr)
}
return stdout, nil
} }
func dockerRunInput(input io.Reader, args ...string) ([]byte, error) { func dockerRunInput(input io.Reader, args ...string) ([]byte, error) {
@ -122,7 +150,7 @@ func build(configfile string) {
) )
out, err := dockerRun(m.Kernel, "tar", "cf", "-", bzimageName, ktarName) out, err := dockerRun(m.Kernel, "tar", "cf", "-", bzimageName, ktarName)
if err != nil { if err != nil {
log.Fatalf("Failed to extract kernel image and tarball") log.Fatalf("Failed to extract kernel image and tarball: %v", err)
} }
buf := bytes.NewBuffer(out) buf := bytes.NewBuffer(out)
bzimage, ktar, err := untarKernel(buf, bzimageName, ktarName) bzimage, ktar, err := untarKernel(buf, bzimageName, ktarName)