2016-11-14 1 views
0

Ich habe den folgenden Code und ein Aufruf an die API gibt einen Fehler wie folgt zurück, ich habe auch Docker Daemon-Befehl unten eingefügt. Ich habe ein paar Kombinationen aus HTTP/HTTPS/TCP mit/ohne TLS ausprobiert.Docker API-Aufruf gibt zurück "Server gab HTTP-Antwort an HTTPS-Client"

Wo könnte ich hier falsch liegen?

"Panik: Fehler versucht, eine Verbindung herzustellen: https://172.28.8.212:2375/v1.24/containers/json?limit=0 Get: http: Server gab HTTP-Antwort auf HTTPS-Client "

func main() { 
    var headers map[string]string 

    tr := &http.Transport{ 
     TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 
    } 

    cl := &http.Client{Timeout: time.Minute} 

    cli, err := client.NewClient("tcp://172.28.8.212:2375", "1.24", cl, headers) 
    if err != nil { 
     panic(err) 
    } 

    containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) 
    if err != nil { 
     panic(err) 
    } 

    for _, container := range containers { 
     fmt.Printf("%s %s\n", container.ID[:10], container.Image) 
    } 
} 

Mein Docker Daemon gestartet wird als

[Unit] 
Description = Docker Service Daemon 
[Service] 
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://172.28.8.211:8500 
+0

Ich bin nicht sicher, wie diese Client-API verwendet wird, aber warum liefern Sie ein "http.Client", wenn Sie nur eine Verbindung zu einem 'tcp:// 'Protokoll? – JimB

+0

2375 ist der HTTP-Port. 2376 ist der Standard-HTTPS-Port. – johnharris85

Antwort

0
folgt
func main() { 
    var headers map[string]string 

    tr := &http.Transport{} <---- Note the difference here. 

    tr.Dial = func(proto, addr string) (net.Conn, error) { 
     fmt.Println("Dial called") 
     conn, err := net.DialTimeout(proto, addr, time.Minute) 
     if err != nil { 
      fmt.Println("There was an err", err) 
     } 
     return conn, err 
    } 

    cl := &http.Client{Transport: tr} 
    cli, err := client.NewClient("http://x.y.z.w:2376", "1.24", cl, headers) 
    if err != nil { 
     panic(err) 
    } 

    containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) 
    if err != nil { 
     panic(err) 
    } 

    for _, container := range containers { 
     fmt.Printf("%s %s\n", container.ID[:10], container.Image) 
    } 
} 
+0

Beachten Sie, dass das Ausführen des Docker-Daemons ohne TLS und das Abhören eines Ports dasselbe ist wie das Aktivieren von Telnet mit Root und das Festlegen eines Kennworts für den Benutzer root. Ich würde nicht empfehlen, dies jemals irgendwo zu tun. – BMitch

+0

Yerek, Thans. Ich verstehe das, aber wie du sehen kannst, habe ich gerade erst angefangen. – Rajesh

+0

Yup, habe gerade gesehen, dass es mit dem Schnitt auftaucht. Es gibt viele schlechte Beispiele im Internet, also wollte ich nur sicher sein, dass dies mit einem Warnhinweis versehen wurde, bevor jemand blindlings kopiert/eingefügt wurde. – BMitch

Verwandte Themen