首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Golang接口的`docker run` (Docker docs)

使用Golang接口的`docker run` (Docker docs)
EN

Stack Overflow用户
提问于 2017-03-16 00:57:02
回答 3查看 1.5K关注 0票数 3

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

代码语言:javascript
复制
 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_docker.go死机:错误:没有这样的图像:阿尔卑斯

代码语言:javascript
复制
    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

但是当我运行等同的命令行时,我发现

代码语言:javascript
复制
    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 client查看,是否需要对ImagePull函数进行一些调整?这里的任何帮助都将不胜感激!

这是指向文档https://docs.docker.com/engine/api/getting-started/的链接

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-06 23:28:19

也有同样的问题,“拉动”似乎不起作用。不过,我找到了修复方法。

1)修改拉取线为

代码语言:javascript
复制
pullstat, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{})

并添加

代码语言:javascript
复制
io.Copy(os.StdOut,pullstat) 

在ImagePull之后

我还没试过做一个

代码语言:javascript
复制
io.Copy(nil,pullstat) 

但这是我下一步要尝试的事情。

票数 1
EN

Stack Overflow用户

发布于 2017-05-12 20:06:11

Image.Pull返回一个您必须读取并关闭的io.Reader;如果您不这样做,连接将在图像被拉出之前关闭。

您只需丢弃其中的内容并将其关闭,拉取就会起作用。

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 02:20:02

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42816132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档