mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Don't write pull output to stdout on container creating
Fixes #8632 Signed-off-by: Alexandr Morozov <lk4d4@docker.com>
This commit is contained in:
parent
6ac9768eaf
commit
ad136e1ae3
2 changed files with 23 additions and 2 deletions
|
@ -1986,6 +1986,10 @@ func (cli *DockerCli) CmdTag(args ...string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *DockerCli) pullImage(image string) error {
|
func (cli *DockerCli) pullImage(image string) error {
|
||||||
|
return cli.pullImageCustomOut(image, cli.out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cli *DockerCli) pullImageCustomOut(image string, out io.Writer) error {
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
repos, tag := parsers.ParseRepositoryTag(image)
|
repos, tag := parsers.ParseRepositoryTag(image)
|
||||||
// pull only the image tagged 'latest' if no tag was specified
|
// pull only the image tagged 'latest' if no tag was specified
|
||||||
|
@ -2014,7 +2018,7 @@ func (cli *DockerCli) pullImage(image string) error {
|
||||||
registryAuthHeader := []string{
|
registryAuthHeader := []string{
|
||||||
base64.URLEncoding.EncodeToString(buf),
|
base64.URLEncoding.EncodeToString(buf),
|
||||||
}
|
}
|
||||||
if err = cli.stream("POST", "/images/create?"+v.Encode(), nil, cli.out, map[string][]string{"X-Registry-Auth": registryAuthHeader}); err != nil {
|
if err = cli.stream("POST", "/images/create?"+v.Encode(), nil, out, map[string][]string{"X-Registry-Auth": registryAuthHeader}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -2081,7 +2085,8 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc
|
||||||
if statusCode == 404 {
|
if statusCode == 404 {
|
||||||
fmt.Fprintf(cli.err, "Unable to find image '%s' locally\n", config.Image)
|
fmt.Fprintf(cli.err, "Unable to find image '%s' locally\n", config.Image)
|
||||||
|
|
||||||
if err = cli.pullImage(config.Image); err != nil {
|
// we don't want to write to stdout anything apart from container.ID
|
||||||
|
if err = cli.pullImageCustomOut(config.Image, cli.err); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Retry
|
// Retry
|
||||||
|
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
|
@ -2380,3 +2381,18 @@ func TestRunVolumesNotRecreatedOnStart(t *testing.T) {
|
||||||
|
|
||||||
logDone("run - volumes not recreated on start")
|
logDone("run - volumes not recreated on start")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRunNoOutputFromPullInStdout(t *testing.T) {
|
||||||
|
defer deleteAllContainers()
|
||||||
|
// just run with unknown image
|
||||||
|
cmd := exec.Command(dockerBinary, "run", "asdfsg")
|
||||||
|
stdout := bytes.NewBuffer(nil)
|
||||||
|
cmd.Stdout = stdout
|
||||||
|
if err := cmd.Run(); err == nil {
|
||||||
|
t.Fatal("Run with unknown image should fail")
|
||||||
|
}
|
||||||
|
if stdout.Len() != 0 {
|
||||||
|
t.Fatalf("Stdout contains output from pull: %s", stdout)
|
||||||
|
}
|
||||||
|
logDone("run - no output from pull in stdout")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue