Add a moby build --pull option to force pulling images

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
Justin Cormack
2017-03-24 15:34:19 +00:00
parent eac7ab7db0
commit ead0d2f2a3
4 changed files with 289 additions and 218 deletions

View File

@@ -3,11 +3,9 @@ package main
import (
"archive/tar"
"bytes"
"errors"
"fmt"
"io"
"io/ioutil"
"os/exec"
"strings"
)
@@ -15,131 +13,6 @@ import (
// used the containerd libraries to do this instead locally direct from a local image
// cache as it would be much simpler.
func dockerCreate(image string) (string, error) {
docker, err := exec.LookPath("docker")
if err != nil {
return "", errors.New("Docker does not seem to be installed")
}
// we do not ever run the container, so /dev/null is used as command
args := []string{"create", image, "/dev/null"}
cmd := exec.Command(docker, args...)
stderrPipe, err := cmd.StderrPipe()
if err != nil {
return "", err
}
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
return "", err
}
err = cmd.Start()
if err != nil {
return "", err
}
stdout, err := ioutil.ReadAll(stdoutPipe)
if err != nil {
return "", err
}
stderr, err := ioutil.ReadAll(stderrPipe)
if err != nil {
return "", err
}
err = cmd.Wait()
if err != nil {
return "", fmt.Errorf("%s: %s", err, stderr)
}
container := strings.TrimSpace(string(stdout))
return container, nil
}
func dockerExport(container string) ([]byte, error) {
docker, err := exec.LookPath("docker")
if err != nil {
return []byte{}, errors.New("Docker does not seem to be installed")
}
args := []string{"export", container}
cmd := exec.Command(docker, args...)
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("%s: %s", err, stderr)
}
return stdout, nil
}
func dockerRm(container string) error {
docker, err := exec.LookPath("docker")
if err != nil {
return errors.New("Docker does not seem to be installed")
}
args := []string{"rm", container}
cmd := exec.Command(docker, args...)
stderrPipe, err := cmd.StderrPipe()
if err != nil {
return err
}
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
return err
}
err = cmd.Start()
if err != nil {
return err
}
_, err = ioutil.ReadAll(stdoutPipe)
if err != nil {
return err
}
stderr, err := ioutil.ReadAll(stderrPipe)
if err != nil {
return err
}
err = cmd.Wait()
if err != nil {
return fmt.Errorf("%s: %s", err, stderr)
}
return nil
}
var exclude = map[string]bool{
".dockerenv": true,
"Dockerfile": true,