`run docker 'utilizzando Golang API (Docker docs)

Sto cercando di utilizzare il tutorial di Docker per ricreare una docker run . Ecco il seguente codice da tutorial online

  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) } 

Il problema che vedo con questo è che se l'alpinista non è disponibile localmente, non tira l'ultima e finisce per lanciare un errore. ad esempio XXXXX $ go eseguire panic di go_docker.go: Errore: Nessuna image simile: alpina

  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 

Ma quando ho eseguito la linea di command equivalente, vedo

  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 

Ho provato a guardare attraverso il client di Go, devo modificare qualcosa con la function ImagePull? Qualsiasi aiuto qui sarebbe apprezzato!

Ecco il link ai documenti https://docs.docker.com/engine/api/getting-started/

Aggiornamento: avevo testato lo stesso tutorial per la versione python, e funzionava bene. Mi chiedo se la pagina Golang necessita di aggiornamento.

Il client docker è open source e scritto in Go, in modo da poter vedere esattamente come hanno implementato la propria versione. Credo che il codice corrispondente sia nella function container / create.go pullImage.

Image.Pull restituisce un io.Reader che devi leggere e chiudere; se la connessione non viene chiusa prima che l'image venga tirata.

È ansible solo scartare il contenuto e chiuderlo, quindi il tiro functionrà.

Aveva la stessa questione, la "Pull" non sembrava funzionare. Trovato una correzione però.

1) Modifica la tua linea di traino su

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

e aggiungi

 io.Copy(os.StdOut,pullstat) 

dopo l'ImagePull

Non ho provato a fare un

 io.Copy(nil,pullstat) 

ma questo è nella mia list di cose da provare a seguire.