Docker çekme: TLS el sıkışma zaman aşımı


15

Bunu sürekli olarak alıyorum (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

Ancak curl TLS iyi çalışıyor (kimlik doğrulama hatası dışında):

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

Ve hatta küçük bir golang programı (docker'ı taklit etmek için) iyi çalışıyor:

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

Docker TLS zaman aşımı isteği için pcap:

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

Ne yanlış gidiyor olabilir ki?


1
Benim dsl modem takas ve sorun gitti ... Bir mtu sorun olduğundan şüpheleniyorum.
Willem

Yanıtlar:


17

net/http: TLS handshake timeoutyavaş internet bağlantınız olduğu anlamına gelir. Varsayılan bağlantı zaman aşımı değeri ortamınız için çok küçük. Maalesef docker'ın bağlantı zaman aşımını değiştirmenize izin veren hiçbir ayarı yok. Başka bir yerde kendi kayıt önbelleğinizi oluşturmaya ve ondan resim çekmeye çalışabilirsiniz .


1
Eh, speedtest.netve fast.combenim internet hızı / 90 Mbit olduğunu s göstermektedir. Bu yavaş mı? python:2.7-slimGörüntü çekiyorum . hello-worldPython bir değil hub dan çekmek mümkün . Bana aynı TLS handshake timeouthatayı veriyor .
Nikhil Chilwant

3
İnsanlar dramatik bir şey yapmaya başlamadan önce şunu belirtmek istiyorum: görüntü adında bir yazım hatası olması aynı hatayı üretir. Çok açıklayıcı.
Barafu Albino

2
TLS el sıkışma zaman aşımı çoğunlukla internet bağlantısının yavaşlaması anlamına gelmez. TLS anlaşması farklı nedenlerle durursa, bu mesaj da görünecektir. Örneğin, bir taraf belirli bir TLS sürümüyle veya bir sertifika sorunu nedeniyle konuşmak istemiyorsa.
The Bndr

4

Eşit bir Sorun yaşadım, docker run hello-world1. kez kullanarak https://registry-1.docker.io/v2/, kullanarak bir görüntü indirilmesi ile sonuçlanan,

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

Web'de saatlerce arama yapıp, bunun bir proxy arkasında ubuntu 18.04 ve geçerli docker sürümü olan bazı kullanıcılarda gerçekleştiğini öğrendim. Geçici çözüm, yalnızca http-proxy yapılandırmasından ayrılmak ve tüm http (https değil) karşıdan yüklemeyi zorlamak için tüm https-proxy yapılandırmasını kaldırmaktır.

Bilmiyorum, asıl sebep nedir.

(bu arada: Besteci ve paketçi ile eşit "TLS anlaşması" sorunum vardı. Bunun nedeni, ubuntu tarafından varsayılan olarak sağlanmayan eksik bir cacert.pem dosyasıydı. Belki de bu docker sorunu aynı yöne gidiyor ?)


4

Benim durumumda sunucum nat ve proxy'nin arkasındaydı ve geçerli terminalde ne yaptığımı otomatik olarak proxy'yi algılamaya ayarlıyorum İhracat proxy ayarları var

root@k8master:~/runner# export http_proxy="http://192.168.10.208:3128"
root@k8master:~/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

Aynı sorunu yaşıyorum. Sonra Azamat Hackimov'un cevabı bana doğru yönü gösterdi. Özellikle hizmeti başlatmak istediğimde makinem biraz yavaş. Bu nedenle kısa zaman aşımı başladı ve isteğimi öldürdü.

Bu benim geçici çözümüm:

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

Sadece istek üzerine sunucuyu çekiç. Genellikle ikincisi benim için başarılı.


Kesin bir çözüm değil ama geçici bir çözüm olarak iyi
Gonzalo Cao

3

Özel bir kayıt defteri kullanıyorsanız, bunun için sertifikayı /etc/docker/certs.d/ registername /ca.crt altına yerleştirmeniz gerekir.

kayıt adı buna göre değişecektir

Ayrıca, lütfen MTU boyutunu 1300 olarak değiştirin , bu da hatayı çözmek için yaptığım bir şeydi. Zaten yapmış olabileceğinize inanıyorum. MTU değişikliği komutu

ip link set dev eth0 mtu 1300

İnternet hızı gerçekten iyi ise MTU boyutu bu hatayı önlemek için kontrol etmek önemlidir


Bu iyi bir ipucu, ancak sertifikanın x509: certificate signed by unknown authorityolmaması hatayla sonuçlanacaktır TLS handshake timeout.
wisbucky

0

Benim için çalışan farklı bir ağ arayüzü kullanmaktı. Ethernet (kablolu) üzerinden bağlanmak yerine, wifi'ye geçtim. Sorun çözüldü.

Bu arada Raspbian Stretch'in yeni bir kurulumundaydım.


0

Yukarıdaki cevapların hiçbiri sorunumu çözemez, ancak aşağıda https://github.com/helm/helm/issues/5220 benim için çalıştığını buldum !

Bu değişiklikten sonra şirketimin BT dairesi bir çözüm buldu. Vekil sunucumuza https: // url ile https_proxy ortam değişkenini kullandım. Bu, kullandığımız araçların çoğu için geçerlidir, ancak dümen veya daha yeni kube için geçerli değildir. TLS anlaşmasıyla ilgili problemleri var gibi görünüyor . Https: // yerine bir http: // url'ye (ör. Https_proxy = http: // myproxy ) geçtik ve şimdi her şey yolunda gidiyor .


0

TLS handshake timeoutDocker daemon proxy'niz doğru yapılandırılmamışsa hatayı alabilirsiniz .

# 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 

Daha fazla ayrıntı için bkz. Https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.