도커 풀 : TLS 핸드 셰이크 시간 초과 if err !=

나는 이것을 꾸준히 얻습니다 (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

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



답변

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


답변

내 경우에는 서버가 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

답변

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 파일이 없기 때문입니다. 아마도이 도커 문제는 같은 방향으로 가고 있습니다. ?)


답변

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

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

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

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


답변

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

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

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

ip link set dev eth0 mtu 1300

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


답변

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

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


답변

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

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