Ubuntu 16.04 安装Docker ,Pull Docker image的时候遇到docker pull TLS handshake timeout

来源:互联网 发布:c语言与cin.get 编辑:程序博客网 时间:2024/05/02 11:28

docker pull ubuntu

执行该语句报错。。。。

遇到了下的问题,

error pulling image configuration: Get https://dseasb33srnrn.cloudfront.NET/registry-v2/docker/registry/v2/blobs/sha256/e3/e369c36508565c04452573471f3d2744329ecc65c302bd642fc5672830f09c6a/data?Expires=1484796497&Signature=DMls8thKqq0TuI295Frs8~PVg5TcmGAC5BoFSmA3RiKZKZj4eATQNkOEZbLN2Bp3v~27YB3xRLCZFXEe1JXalrdZHrkEOM4OgEOribsFAGibFG67YYxW5WiDBnpZccmtUKVqLMABskt2teE2dwTn5WPAh8uIcbqlcchfwQY3nuA_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: net/http: TLS handshake timeout


解决方法是:

mkdir -p certs && openssl req \  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \  -x509 -days 365 -out certs/domain.crt
然后依次输入生成的证书的信息即可!!!

(填一些省市区县姓名信息等)

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

有时还可能会在次出现,以下是解决方案:

最近在做Docker相关的东西,发现只要一pull镜像,就出现如下的ERROR

x509: certificate signed by unknown authority.

调查后发现,是公司IT把https证书换成了公司的证书(目的大家自己猜)。

解决思路:把替换后的证书直接用openssl拉下来,然后加入到系统(我是Ubuntu)系统证书中,然后使用update-ca-certificates更新,最后重启docker服务,成功!!

方式1:

$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/cloudfront.crt

上面的dseasb33srnrn.cloudfront.net是docker提示证书错误的网址。把这个网址替换成你的网站,同时把改下你要生成的证书名字就OK。

然后重启docker deamon

$ sudo service docker restart

方式2:

$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/ssl/certs/ca-certificates.crt

$ update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
Adding debian:cloudfront.pem
done.
done.

同时替换上面的dseasb33srnrn.cloudfront.net就好了.

然后重启docker

$ sudo service docker restart

结语:

我上面的方式之所以可以搞定大多数由于公司IT部门替换https证书造成的错误,是因为很多程序是使用系统默认的证书(路径)。

对于一些特殊的程序,比如python pip,不使用系统默认的证书,而是使用自己的路径,可以强制它使用*方式2*生成的证书。

本人适合第二种方法。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

还可以这样解决:

出现这个问题,一般的原因是无法连接到 docker hub,通过:

$ sudo systemctl stop docker$ sudo docker -d -D

开启 debug 模式,然后再运行 pull 就会出现类似下面的错误:

DEBU[0282] Error contacting registry https://registry-1.docker.io/v1/: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/a3/a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4/data?Expires=1449474474&Signature=Gw6Y0xqjZT-1S8kPpNg9Z6GA~SH6SunDvh3eNGWvDQtBrotU9Qv6a3Mr6sAkP5L84zM32lsTxGrIehFKyEuwVncRy1sfEI-4Ggiuvqedwaw61HFYYBefoQJHDUtHOxUZkOJ6AuUlxOJeKhfHyLDMmPf3H1NSQ8U8L5Mf8rUXL0M_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: net/http: TLS handshake timeout 

很明显可以看出是连接不到 docker hub,那就需要查看网络原因了。可能需要个梯子。当然较简单的解决办法就是用国内的仓库,下面的方法就是使用国内的 daocloud 的仓库:

$ echo "DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"" | sudo tee -a /etc/default/docker

$ sudo service docker restart

0 0
原创粉丝点击