fsouza / go-dockerclient

Go client for the Docker Engine API.
https://pkg.go.dev/github.com/fsouza/go-dockerclient?tab=doc
BSD 2-Clause "Simplified" License
2.18k stars 565 forks source link

invalid memory address #544

Closed sms81 closed 8 years ago

sms81 commented 8 years ago

Hi, I am using tlsclient to try to list all docker images here is the code

package main

import (
    "fat"

    "github.com/fsouza/go-dockerclient"

)

func main() {
    endpoint := "tcp://10.0.1.16:2376"
    //certpath:=os.Getenv("~/Documents/certificates")
    certpath:="~/Documents/certificates"
    ca := fmt.Sprintf("%s/ca.pem",certpath)
    cert:=fmt.Sprintf("%s/cert.pem",certpath)
    key:=fmt.Sprintf("%s/key.pem",certpath)
    client,_ := docker.NewTLSClient(endpoint,cert,key,ca)

    imgs,_:=client.ListImages(docker.ListImagesOptions{All:true})
    for _, img := range images {
        fmt.Println("ID: ", img.ID)
        fmt.Println("RepoTags: ", img.RepoTags)
        fmt.Println("Created: ", img.Created)
        fmt.Println("Size: ", img.Size)
        fmt.Println("VirtualSize: ", img.VirtualSize)
        fmt.Println("ParentId: ", img.ParentID)
    }

}

I am having the following error panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x72c7d]

goroutine 1 [running]: panic(0x3d91c0, 0xc82000a0d0) /usr/local/go/src/runtime/panic.go:481 +0x3e6 github.com/fsouza/go-dockerclient.(_Client).do(0x0, 0x45d5c0, 0x3, 0x463b30, 0xd, 0x0, 0x0, 0x0, 0x0, 0x66a4d8, ...) /Users/saidsaifi/Documents/go/src/github.com/fsouza/go-dockerclient/client.go:402 +0x67d github.com/fsouza/go-dockerclient.(_Client).ListImages(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/saidsaifi/Documents/go/src/github.com/fsouza/go-dockerclient/image.go:109 +0x1a2 main.main() /Users/saidsaifi/Documents/docker_restapi/client.go:20 +0x450 exit status 2

anybody knows what is the problem?

fsouza commented 8 years ago

Hi @sms81, please check the error returned by NewTLSClient. When it returns an error, it also returns a nil client, and calling client.ListImages would result in a nil-pointer dereference error, which is what you're facing.

sms81 commented 8 years ago

Oi francisco, eu primeiro quero agradecer pelo seu projeto lindo que voce fez. Quando eu faço panic para NEWTLSClient eu recebo esse erro

panic: open ~/Documents/certificates/cert.pem: no such file or directory

goroutine 1 [running]:
panic(0x3bfc40, 0xc8200132c0)
    /usr/local/go/src/runtime/panic.go:481 +0x3e6
main.main()
    /Users/saidsaifi/Documents/docker_restapi/client.go:21 +0x541
exit status 2

mas eu tenho certeza que esse file existe e esta nesse lugar voce consegue me ajudar?

fsouza commented 8 years ago

@sms81 opa, a expansão ~/Documents/certificates/cert.pem não funciona no Go, quem entende que ~ é o seu home é o shell (foi mal, só vi que tinha esse trecho no seu código depois que você comentou).

Você tem que botar o caminho completo (/Users/saidsaifi/Documents/certificates/cert.pem) ou usar a função os.ExpandEnv (no seu caso, certpath := os.ExpandEnv("$HOME/Documents/certificates/cert.pem").

sms81 commented 8 years ago

@fsouza valeu! mt obrigado eu tentei colocar o caminho completo não deu certo continuou aparecendo o mesmo erro mas eu usei o os.ExpandEnv parou de dar erro mas n sei consegui ver as imagens do docker porque to fora do network segunda feira eu testo. muito obrigado mesmo voce me ajudou bastante :) eu queria saber se voce pode mandar para mim exemplos do seu go-dockerclient tipo para criar/apagar/parar ... containers and images se vc conseguir meu email e sms81@mail.aub.edu muito obrigado denovo

sms81 commented 8 years ago

@fsouza deu certo abraços