docker run`使用Golang API(Docker docs)

我正在尝试使用Docker的教程重新创builddocker run 。 以下是在线教程中的以下代码

  package main import ( "io" "os" "github.com/docker/docker/client" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "golang.org/x/net/context" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) } _, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) if err != nil { panic(err) } resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "alpine", Cmd: []string{"echo", "hello world"}, }, nil, nil, "") if err != nil { panic(err) } if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } if _, err = cli.ContainerWait(ctx, resp.ID); err != nil { panic(err) } out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) if err != nil { panic(err) } io.Copy(os.Stdout, out) } 

我所看到的问题是,如果“高山”docker在本地不可用,它不会拉最新,最后抛出一个错误。 例如XXXXX $ go go go_docker.go panic:错误:没有这样的图像:高山

  goroutine 1 [running]: panic(0x27ffa0, 0xc4202afa50) /usr/local/go/src/runtime/panic.go:500 +0x1a1 main.main() /Users/rvenkatesh/go_coding/raghu_test_code/go_docker.go:30 +0x592 exit status 2 

但是当我运行命令行相当的时候,我明白了

  XXXX$ docker run alpine echo hello world Unable to find image 'alpine:latest' locally latest: Pulling from library/alpine 627beaf3eaaf: Pull complete Digest:sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 Status: Downloaded newer image for alpine:latest hello world 

我试图通过Go客户端,我需要调整任何与ImagePullfunction? 任何帮助在这里将不胜感激!

这里是链接到文档https://docs.docker.com/engine/api/getting-started/

更新:我已经testing了相同的教程python版本,它工作得很好。 我想知道Golang页面是否需要更新。

Image.Pull返回一个你必须阅读和closures的io.Reader; 如果你没有连接将被closures,图像被拉。

你可以丢弃它的内容并closures它,然后拉将工作。

docker客户端是开源的,用Go编写,所以你可以看到他们是如何实现他们的版本。 我相信相关的代码是在容器/ create.go pullImage函数。

有同样的问题,“拉”似乎没有工作。 find一个修复虽然。

1)修改你的拉线

 pullstat, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) 

并添加

 io.Copy(os.StdOut,pullstat) 

在ImagePull之后

我还没有尝试过

 io.Copy(nil,pullstat) 

但这是我的下一个尝试列表。