问题描述
某些 Docker 镜像,由于网络原因,而出现拉取缓慢的情况。
这需要我们通过网络加速服务或者其他方法进行镜像拉取。
该笔记将记录:如何解决镜像拉取慢的问题,以及常见问题处理。
解决方案
目前(01/07/2021),有两种方案解决该问题:
1)使用网络加速服务
2)使用”镜像仓库镜像“(Registry Mirror)
方案一、使用网络加速服务
// 添加类似如下配置: # systemctl edit docker.service [Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1" // 显示配置结果: # systemctl show --property Environment docker.service // 重新启动服务 # systemctl restart docker.service
更多细节请参考官方文档:
docker pull/Proxy configuration
Control Docker with systemd/HTTP/HTTPS proxy
方案二、使用 Registry Mirror 服务
在配置中,使用 registry-mirrors 地址:
# mkdir -pv /etc/docker # vim /etc/docker/daemon.json { ... "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"], "max-concurrent-downloads": 3 ... } # systemctl reload docker
关于可用的 registry-mirrors 地址:
1)可以注册自己的阿里云帐号,在 容器镜像服务 / 镜像加速器 中,查看地址(每个人的地址前缀都不同)。
2)或者使用其他 Registry Mirror 地址(通过搜索引擎搜索获取)。
关于 max-concurrent-downloads 参数:
1)该参数用于设置并行下载数量,提高下载速度
2)根据文档,参数 3 为默认值。
常见问题描述
proxyconnect tcp: net/http: TLS handshake timeout
ssl - Docker not able to pull images behind proxy TLS handshake timeout - Stack Overflow
问题描述:执行 docker pull 命令时产生如下信息:
# docker pull google/cadvisor Using default tag: latest Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: net/http: TLS handshake timeout
问题原因:配置错误,我们没有单独的 HTTPS 代理,我们的 HTTP 代理支持 HTTPS 代理。
解决办法:
将配置 Environment="HTTPS_PROXY=https://proxy.example.com:443" 修改为 Environment="HTTPS_PROXY=http://proxy.example.com:443"
Upload failed, retrying: remote error: tls: protocol version not supported
问题描述:在上传镜像(docker push)时,产生如下错误:
... time="2020-11-20T10:40:54.481118132+08:00" level=info msg="Attempting next endpoint for push after error: remote error: tls: protocol version not supported" time="2020-11-20T10:43:22.178234212+08:00" level=error msg="Upload failed, retrying: remote error: tls: protocol version not supported" time="2020-11-20T10:43:53.722306200+08:00" level=error msg="Upload failed, retrying: remote error: tls: protocol version not supported" time="2020-11-20T10:44:34.796173126+08:00" level=error msg="Upload failed, retrying: remote error: tls: protocol version not supported" time="2020-11-20T10:45:21.055632062+08:00" level=error msg="Upload failed, retrying: EOF" time="2020-11-20T10:45:39.645404914+08:00" level=error msg="Not continuing with push after error: context canceled" ...
问题原因:「Starting from version 18.09 docker removed support for older tls ciphers.」,而我们使用的网络加速(HTTP PROXY)使用旧版加密算法来建立 HTTPS 连接,因而导致该问题
解决办法:我们使用 Squid 服务。但是由于时间成本,我们暂时关闭 docker.service 的代理配置以解决问题 :-)
参考文献
docker pull/Proxy configuration
Control Docker with systemd/HTTP/HTTPS proxy
configuration - How do I override or configure systemd services? - Ask Ubuntu
dockerd | Docker Documentation