it-swarm.com.de

Docker Pull: TLS-Handshake-Timeout

Ich bekomme das konsequent (Ubuntu 16.04 LTS):

$ docker pull nginx
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

Curl TLS funktioniert jedoch einwandfrei (abgesehen vom Authentifizierungsfehler):

$ curl https://registry-1.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}

Und selbst ein kleines Golang-Programm (um Docker nachzuahmen) funktioniert einwandfrei:

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
func main() {
    resp, err := http.Get("https://registry-1.docker.io/v2/")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println("Got: ", string(body))
}

Das PCAP für die Docker-TLS-Timeout-Anforderung:

reading from file docker-timeout.pcap, link-type LINUX_SLL (Linux cooked)
00:38:54.782452 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [S], seq 26945613, win 29200, options [mss 1460,sackOK,TS val 1609360 ecr 0,nop,wscale 7], length 0
00:38:54.878630 IP registry-1.docker.io.https > my-ubuntu.52036: Flags [S.], seq 2700732154, ack 26945614, win 26847, options [mss 1460,sackOK,TS val 947941366 ecr 1609360,nop,wscale 8], length 0
00:38:54.878691 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [.], ack 1, win 229, options [nop,nop,TS val 1609384 ecr 947941366], length 0
00:38:54.878892 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1609384 ecr 947941366], length 155
00:38:55.175931 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1609459 ecr 947941366], length 155
00:38:55.475954 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1609534 ecr 947941366], length 155
00:38:56.076327 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1609684 ecr 947941366], length 155
00:38:57.280103 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1609985 ecr 947941366], length 155
00:38:59.684095 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1610586 ecr 947941366], length 155
00:39:04.492102 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1611788 ecr 947941366], length 155
00:39:04.879468 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [F.], seq 156, ack 1, win 229, options [nop,nop,TS val 1611884 ecr 947941366], length 0
00:39:04.976015 IP registry-1.docker.io.https > my-ubuntu.52036: Flags [.], ack 1, win 105, options [nop,nop,TS val 947943890 ecr 1609384,nop,nop,sack 1 {156:157}], length 0
00:39:04.976073 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1611909 ecr 947943890], length 155
00:39:05.275922 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1611984 ecr 947943890], length 155
00:39:05.876104 IP my-ubuntu.52036 > registry-1.docker.io.https: Flags [P.], seq 1:156, ack 1, win 229, options [nop,nop,TS val 1612134 ecr 947943890], length 155

Was könnte möglicherweise schief gehen?

16
Willem

net/http: TLS handshake timeout bedeutet, dass Sie eine langsame Internetverbindung haben. Der Standardwert für das Verbindungszeitlimit ist für Ihre Umgebung zu klein. Leider hat Docker keine Einstellungen, mit denen Sie das Verbindungszeitlimit ändern können. Sie können versuchen, Ihren eigenen Registrierungscache an einer anderen Stelle zu erstellen und Bilder daraus abzurufen.

17
Azamat Hackimov

Ich habe das gleiche Problem. Dann wies mich die Antwort von Azamat Hackimov in die richtige Richtung. Mein Computer ist etwas langsam, insbesondere beim Booten, wenn ich den Dienst starten möchte. Daher setzt die kurze Zeitüberschreitung ein und beendet meine Anfrage.

Dies ist meine Problemumgehung:

docker pull $IMAGE || docker pull $IMAGE ||  docker pull $IMAGE || docker pull $IMAGE

Hämmern Sie einfach den Server mit Anfrage. Normalerweise ist der zweite für mich erfolgreich.

4
JaM

In meinem Fall war mein Server hinter dem nat und dem Proxy und so eingestellt, dass der Proxy automatisch erkannt wird, was ich auf dem aktuellen Terminal getan habe. Ich habe Export-Proxy-Einstellungen

[email protected]:~/runner# export http_proxy="http://192.168.10.208:3128"
[email protected]:~/runner# docker pull gitlab/gitlab-runner:latest
latest: Pulling from gitlab/gitlab-runner
7b722c1070cd: Pull complete 
5fbf74db61f1: Pull complete 
ed41cb72e5c9: Pull complete 
7ea47a67709e: Pull complete 
ae336ceeca88: Pull complete 
f9f79780e6cf: Pull complete 
67e622273f37: Pull complete 
bc84c40af701: Pull complete 
69e36092e9de: Pull complete 
Digest: sha256:b1f5387942aaaf8c220f6613a1e96ba2cbcb6c58a5e47ca0df8ae3216720a15e
Status: Downloaded newer image for gitlab/gitlab-runner:latest
4
Mansur Ali

Ich hatte ein gleiches Problem, als ich zum ersten Mal docker run hello-world Verwendete, was dazu führte, dass ich ein Bild mit https://registry-1.docker.io/v2/ Herunterlud, was zu Ende führte

docker: Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: net/http: TLS handshake timeout.

Durchsuchen Sie das Web stundenlang und stellen Sie fest, dass dies bei einigen Benutzern mit Ubuntu 18.04 und der aktuellen Docker-Version hinter einem Proxy geschieht. Eine Problemumgehung besteht darin, die gesamte https-Proxy-Konfiguration zu entfernen, um nur die http-Proxy-Konfiguration zu belassen und einen http-Download (nicht https) zu erzwingen.

Ich weiß nicht, was der wahre Grund ist.

(Übrigens: Ich hatte ein gleiches "TLS-Handshake" -Problem mit composer und Packagist. Dies lag an einer fehlenden cacert.pem-Datei, die standardmäßig nicht von Ubuntu bereitgestellt wurde. Vielleicht dies Docker-Problem geht in die gleiche Richtung?)

4
The Bndr

Wenn Sie eine private Registrierung verwenden, müssen Sie das Zertifikat dafür unter /etc/docker/certs.d/registryname ablegen/ca.crt

Registrierungsname ändert sich entsprechend

Bitte ändern Sie auch Ihre [~ # ~] mtu [~ # ~] Größe auf 1300. Dies war auch eine Sache, die ich getan habe, um den Fehler zu beheben. Registrierung eins Ich glaube, Sie haben es vielleicht schon getan. Befehl zur MTU-Änderung

ip link set dev eth0 mtu 1300

Die MTU-Größe ist wichtig, um diesen Fehler zu vermeiden, wenn Ihre Internetgeschwindigkeit wirklich gut ist

3
rebelution

Sie können den Fehler TLS handshake timeout Erhalten, wenn Ihr Docker-Daemon-Proxy nicht richtig konfiguriert ist.

# verify docker daemon proxy configuration
/etc/systemd/system/docker.service.d/proxy.conf

# flush changes
Sudo systemctl daemon-reload

# restart docker service
Sudo systemctl restart docker 

Weitere Informationen finden Sie unter https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

0
wisbucky

Was für mich funktionierte, war die Verwendung einer anderen Netzwerkschnittstelle. Anstatt eine Verbindung über Ethernet (verkabelt) herzustellen, wechselte ich zu WLAN. Problem gelöst.

Ich war übrigens auf einer Neuinstallation von Raspbian Stretch.

0
bandaangosta

Keine der obigen Antworten kann mein Problem lösen, aber ich habe festgestellt, dass unten https://github.com/helm/helm/issues/522 für mich funktioniert!

Nach dieser Änderung hat die IT-Abteilung meines Unternehmens eine Lösung gefunden. Ich habe die Umgebungsvariable https_proxy mit https: // url für unseren Proxy verwendet. Dies funktioniert für die meisten Tools, die wir verwenden, jedoch nicht für das Ruder oder den neueren Würfel. Sie scheinen einige Probleme mit dem TLS-Handshake zu haben. Wir haben von https: // zu einer http: // URL gewechselt (z. B. https_proxy = http: // myproxy) und jetzt funktioniert alles einwandfrei.

0
Fei