Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

430
Visualizações
`docker run` using Golang API (Docker docs)

I am trying to use Docker's tutorial in recreating a docker run. Here is the following code from online tutorial

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

The problem I see with this is, if 'alpine' docker, is not available locally, it doesn't pull the latest and ends up throwing an error. e.g XXXXX$ go run go_docker.go panic: Error: No such image: alpine

    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

But when I run the commandline equivalent, I see

    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

I tried looking through Go client, do I need to tweak anything with ImagePull function? Any help here would be appreciated!

Here is the link to the docs https://docs.docker.com/engine/api/getting-started/

Update: I had tested the same tutorial for python version, and it worked just fine. I wonder if the Golang page needs update.

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Image.Pull returns an io.Reader which you must read and close; if you do not the connection will be closed before the image is pulled.

You can just discard the contents of it and close it, then the pull will work.

about 4 years ago · Santiago Trujillo Relatório

0

Was having the same issue, the "Pull" didn't seem to be working. Found a Fix though.

1) Modify your pull line to

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

and add

io.Copy(os.StdOut,pullstat) 

after the ImagePull

I haven't tried doing an

io.Copy(nil,pullstat) 

but that's on my list of things to try next.

about 4 years ago · Santiago Trujillo Relatório

0

The docker client is open source and written in Go, so you can see exactly how they've implemented their version. I believe the relevant code is in the container/create.go pullImage function.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda