1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

If curl is installed, 'docker pull' will use it to download images with a pretty progress bar. Otherwise it will fallback to regular http.Get()

This commit is contained in:
Solomon Hykes 2013-02-26 17:28:24 -08:00
parent aa12da6f50
commit 003ec21d36
3 changed files with 27 additions and 4 deletions

View file

@ -157,7 +157,7 @@ Step by step host setup
3. Type the following commands: 3. Type the following commands:
apt-get update apt-get update
apt-get install lxc wget bsdtar apt-get install lxc wget bsdtar curl
4. Download the latest version of the [docker binaries](https://dl.dropbox.com/u/20637798/docker.tar.gz) (`wget https://dl.dropbox.com/u/20637798/docker.tar.gz`) (warning: this may not be the most up-to-date build) 4. Download the latest version of the [docker binaries](https://dl.dropbox.com/u/20637798/docker.tar.gz) (`wget https://dl.dropbox.com/u/20637798/docker.tar.gz`) (warning: this may not be the most up-to-date build)
5. Extract the contents of the tar file `tar -xf docker.tar.gz` 5. Extract the contents of the tar file `tar -xf docker.tar.gz`

View file

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"io" "io"
"math/rand" "math/rand"
"os/exec"
"time" "time"
) )
@ -83,3 +84,19 @@ func Pv(src io.Reader, info io.Writer) io.Reader {
}() }()
return r return r
} }
// Curl makes an http request by executing the unix command 'curl', and returns
// the body of the response. If `stderr` is not nil, a progress bar will be
// written to it.
func Curl(url string, stderr io.Writer) (io.Reader, error) {
curl := exec.Command("curl", "-#", "-L", url)
output, err := curl.StdoutPipe()
if err != nil {
return nil, err
}
curl.Stderr = stderr
if err := curl.Start(); err != nil {
return nil, err
}
return output, nil
}

View file

@ -390,12 +390,18 @@ func (srv *Server) CmdPull(stdin io.ReadCloser, stdout io.Writer, args ...string
u.Path = path.Join("/docker.io/images", u.Path) u.Path = path.Join("/docker.io/images", u.Path)
} }
fmt.Fprintf(stdout, "Downloading from %s\n", u.String()) fmt.Fprintf(stdout, "Downloading from %s\n", u.String())
resp, err := http.Get(u.String()) // Download with curl (pretty progress bar)
// If curl is not available, fallback to http.Get()
archive, err := future.Curl(u.String(), stdout)
if err != nil { if err != nil {
return err if resp, err := http.Get(u.String()); err != nil {
return err
} else {
archive = resp.Body
}
} }
fmt.Fprintf(stdout, "Unpacking to %s\n", name) fmt.Fprintf(stdout, "Unpacking to %s\n", name)
img, err := srv.images.Import(name, resp.Body, nil) img, err := srv.images.Import(name, archive, nil)
if err != nil { if err != nil {
return err return err
} }