도커 풀 : TLS 핸드 셰이크 시간 초과


14

나는 이것을 꾸준히 얻습니다 (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는 제대로 작동합니다 (인증 오류 제외).

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

그리고 작은 golang 프로그램 (도커를 모방 한)조차도 잘 작동합니다.

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 시간 초과 요청에 대한 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

무엇이 잘못 될 수 있습니까?


1
내 dsl 모뎀을 교체했는데 문제가 사라졌습니다. mtu 문제인 것 같습니다.
Willem

답변:


14

net/http: TLS handshake timeout인터넷 연결이 느리다는 것을 의미합니다. 연결 시간 종료 기본값이 사용자 환경에 비해 너무 작습니다. 불행히도 docker에는 연결 시간 제한을 변경할 수있는 설정이 없습니다. 다른 곳에 자체 레지스트리 캐시 를 작성 하고 이미지를 가져 오려고 시도 할 수 있습니다 .


1
음, speedtest.net그리고 fast.com내 인터넷 속도 / 90 메가 비트입니다이야 보여줍니다. 천천히? python:2.7-slim이미지를 당기고 있습니다. 나는 hello-world허브 에서 뽑을 수 있지만 파이썬은 뽑을 수 없습니다. 나에게 같은 TLS handshake timeout오류가 발생합니다.
Nikhil Chilwant

3
사람들이 극적인 작업을 시작하기 전에 이미지 이름에 오타가 있으면 동일한 오류가 발생합니다. 매우 설명 적입니다.
Barafu Albino

1
TLS 핸드 셰이크 시간 초과는 대부분 인터넷 연결 속도가 느리다는 것을 의미하지 않습니다. 다른 이유로 TLS 핸드 셰이크가 중지 된 경우에도이 메시지가 나타납니다. 예를 들어, 한쪽이 특정 TLS 버전과 대화하고 싶지 않거나 인증서 문제로 인해 싫어하는 경우가 있습니다.
Bndr

4

내 경우에는 서버가 nat 및 프록시 뒤에 있었고 현재 터미널에서 수행 한 프록시를 자동 감지하도록 설정했습니다. 내보내기 프록시 설정이 있습니다.

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

3

I는 사용함으로써 동일한 문제를 겪고 docker run hello-world, 1 시간을 사용하는 화상 다운로드 결과 https://registry-1.docker.io/v2/, 단부를

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

몇 시간 동안 웹을 검색하여 프록시 뒤에서 우분투 18.04 및 현재 도커 릴리스를 사용하는 일부 사용자에게 발생한다는 것을 알았습니다. 해결 방법은 http (https 아님) 다운로드를 강제로 수행하도록 http-proxy 구성 만 유지하기 위해 모든 https-proxy 구성을 제거하는 것입니다.

진짜 이유가 무엇인지 모릅니다.

(그런데 : 작곡가와 packagist와 동등한 "TLS 핸드 셰이크"문제가있었습니다. 이것은 우분투에서 기본적으로 제공하지 않은 cacert.pem 파일이 없기 때문입니다. 아마도이 도커 문제는 같은 방향으로 가고 있습니다. ?)


3

나는 같은 문제가 발생합니다. 그런 다음 Azamat Hackimov의 대답이 올바른 방향으로 나를 가리 켰습니다. 서비스를 시작하려고 할 때 특히 부팅 할 때 시스템 속도가 다소 느립니다. 따라서 짧은 시간 초과가 발생하여 요청이 종료됩니다.

이것은 내 해결 방법입니다.

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

요청으로 서버를 망치기 만하면됩니다. 일반적으로 두 번째 것은 나에게 성공합니다.


결정적인 해결책은 아니지만 임시 해결 방법으로 적합
Gonzalo Cao

2

개인 레지스트리를 사용하는 경우 /etc/docker/certs.d/ registryname /ca.crt 아래에 인증서를 배치해야합니다.

레지스트리 이름 은 그에 따라 변경됩니다

또한 MTU 크기를 1300으로 변경하십시오. 이 또한 오류를 해결하기 위해 한 일이었습니다. 이미 한 것으로 생각되는 레지스트리 하나. MTU 변경 명령

ip link set dev eth0 mtu 1300

인터넷 속도가 정말 좋은 경우이 오류를 피하기 위해 MTU 크기가 중요합니다.


좋은 팁이지만 인증서가 x509: certificate signed by unknown authority없으면 오류가 아닙니다 TLS handshake timeout.
wisbucky

0

나를 위해 일한 것은 다른 네트워크 인터페이스를 사용하는 것이 었습니다. 이더넷 (유선)을 통한 연결 대신 Wi-Fi로 전환했습니다. 문제 해결됨.

그건 그렇고 나는 Raspbian Stretch를 새로 설치하고있었습니다.


0

위의 답변 중 어느 것도 내 문제를 해결할 수는 없지만 아래 https://github.com/helm/helm/issues/5220 이 저에게 효과적 이라는 것을 알았 습니다!

그 변경 후 우리 회사의 IT 아파트가 해결책을 찾았습니다. https_url과 함께 https_proxy 환경 변수를 프록시에 사용했습니다. 이것은 우리가 사용하는 대부분의 도구에 적용되지만 조타 또는 새로운 kube에는 적용되지 않습니다. TLS 핸드 셰이크에 문제가있는 것 같습니다 . 우리는 https : //에서 http : // url (예 : https_proxy = http : // myproxy )로 전환했으며 이제 모든 것이 잘 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.