Use new style ISO BIOS mkimage from Linuxkit which unpacks filesystem

Rather than using an initrd, unpack full filesystem for ISO BIOS.

Stream docker output direct to file rather than via a buffer, to save
memory.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
Justin Cormack
2017-08-02 13:36:29 +01:00
parent 305ad031e8
commit 2d930bc8e5
2 changed files with 29 additions and 52 deletions

View File

@@ -21,48 +21,26 @@ import (
"golang.org/x/net/context"
)
func dockerRun(input io.Reader, args ...string) ([]byte, error) {
func dockerRun(input io.Reader, output io.Writer, args ...string) error {
log.Debugf("docker run (input): %s", strings.Join(args, " "))
docker, err := exec.LookPath("docker")
if err != nil {
return []byte{}, errors.New("Docker does not seem to be installed")
return errors.New("Docker does not seem to be installed")
}
args = append([]string{"run", "--rm", "-i"}, args...)
cmd := exec.Command(docker, args...)
cmd.Stdin = input
cmd.Stdout = output
stderrPipe, err := cmd.StderrPipe()
if err != nil {
return []byte{}, err
}
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("%v: %s", err, stderr)
if err := cmd.Run(); err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
return fmt.Errorf("docker run failed: %v output:\n%s", err, exitError.Stderr)
}
return err
}
log.Debugf("docker run (input): %s...Done", strings.Join(args, " "))
return stdout, nil
return nil
}
func dockerCreate(image string) (string, error) {