2017-03-15 9 views
2

docker runを再作成する際にDockerチュートリアルを使用しようとしています。ここでは、オンラインチュートリアルGolang API(Dockerドキュメント)を使用した `docker 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) 
} 

私は「高山」ドッキングウィンドウは、ローカルで利用できない場合、それは最新引っ張っていないされ、これに参照し、エラーを投げ終わる問題から次のコードがあります。 例えば XXXXX $行くgo_docker.go パニック実行:エラー:いいえ、そのようなイメージ:高山

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 

を見ます、私はImagePull関数で何かを調整する必要がありますか?ここのお手伝いをいただければ幸いです!ここで

https://docs.docker.com/engine/api/getting-started/

アップデートドキュメントへのリンクです:私は、Pythonのバージョンで同じチュートリアルをテストしていた、それがうまく働きました。私はGolangのページが更新を必要とするのだろうかと思います。

+0

チュートリアルにリンクしますか? – johnharris85

+0

私の悪い!これを追加したはずです!ドキュメントで私の質問を更新しました! – tw1stud

答えて

0

ドッカークライアントはオープンソースであり、Goで書かれているので、バージョンの実装方法を正確に把握することができます。私は関連するコードがcontainer/create.goのpullImage関数にあると信じています。

+0

「作成」機能のために必要な具体的な調整方法を教えてください。私は "最新の"文字列を追加しようとしましたが、それは助けとはならなかった – tw1stud

+0

問題は、DockerがCLIでGolangに相当するCLIが動作していないことです。私のネイティブドッカーの設定で本当にそのコードや何かがあるかどうかは完全にはわかりません。上に表示されている場合、等価なドッカーの実行コマンドはうまく動作します – tw1stud

+0

あなたのコードがどこに問題があるのか​​分かりませんし、チュートリアルを自分で試す時間がありません。上記を実行するには、ドッカーがコード内で何をしているのかをより詳しく分析する必要がありました。 – BMitch

1

Image.Pullは、読んで閉じなければならないio.Readerを返します。そうしないと、画像が引っ張られる前に接続が閉じられます。

内容を破棄して閉じることができます。次にプルが機能します。

0

同じ問題を抱えていた「プル」は機能していないようでした。しかし、修正を見つけた。

1)私は

io.Copy(nil,pullstat) 

をやって試していないが、それだ

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

にごプルラインを変更し、ImagePull

io.Copy(os.StdOut,pullstat) 

を追加私のリストのt次は試してみよう。

+0

io.copy(nil、pullstat)のテストが終了しました。動作しません。 –

関連する問題