docker构建国内镜像服务
在国内想要下载镜像比较困难,因此很多公司都构建自己的私有仓库。如何搭建私有仓库,请参考《docker私有仓库从无到有》。然而即使私有仓库服务构建完成,但是里面没有镜像,一样很苦恼。今天介绍一下如何利用国内云服务商提供的镜像加速器,来快速下载镜像。 目前国内docker镜像加速器服务商,质量比较好的有阿里云、DaoCloud以及Docker中国。它们配置都是相同,获取专属加速地址,然
在国内想要下载镜像比较困难,因此很多公司都构建自己的私有仓库。如何搭建私有仓库,请参考《docker私有仓库从无到有》。然而即使私有仓库服务构建完成,但是里面没有镜像,一样很苦恼。今天介绍一下如何利用国内云服务商提供的镜像加速器,来快速下载镜像。
目前国内docker镜像加速器服务商,质量比较好的有阿里云、DaoCloud以及Docker中国。
它们配置都是相同,获取专属加速地址,然后将地址写到docker配置文件/etc/docker/daemon.json中。
一、阿里云加速地址:
1、注册阿里云账号,如果有淘宝号也是可以的。https://dev.aliyun.com/search.html
2、注册并登陆成功之后,进入之后点击管理中心
3、进入管理中心,默认业务就是下图,然后在选择镜像加速器,里面就是专属加速地址,并且有配置方法。
DaoCloud配置方式与阿里云类似,只是服务商不一样罢了。
二、 Docker 中国如果不想注册阿里云,那么可以使用Docker中国提供的服务。
可以将https://registry.docker-cn.com,设置到registry-mirrors中即可(与阿里云设置方式一样)。具体方法,可参考https://www.docker-cn.com/registry-mirror。
以上设置好镜像之后,不需要docker login进行登录。
三、遇到问题
问题1:设置完加速地址之后,输入如下命令:
[root@localhost docker]# docker pull mysql
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[root@localhost docker]#
[root@localhost docker]#
查看具体日志信息:
[root@localhost docker]# grep docker /var/log/messages
Mar 7 15:59:06 localhost dockerd: time="2018-03-07T15:59:06.551882623+08:00" level=warning msg="Error getting v2 registry: Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:06 localhost dockerd: time="2018-03-07T15:59:06.551997545+08:00" level=error msg="Not continuing with pull after error: Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:06 localhost dockerd: time="2018-03-07T15:59:06.552080576+08:00" level=error msg="Handler for POST /v1.35/images/create returned error: Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:08 localhost dockerd: time="2018-03-07T15:59:08.441427015+08:00" level=debug msg="Calling GET /_ping"
Mar 7 15:59:08 localhost dockerd: time="2018-03-07T15:59:08.449887376+08:00" level=debug msg="Calling GET /v1.35/info"
Mar 7 15:59:08 localhost dockerd: time="2018-03-07T15:59:08.485088164+08:00" level=debug msg="Calling POST /v1.35/images/create?fromImage=mysql&tag=latest"
Mar 7 15:59:08 localhost dockerd: time="2018-03-07T15:59:08.547151332+08:00" level=debug msg="hostDir: /etc/docker/certs.d/6jwksk60.mirror.aliyuncs.com"
Mar 7 15:59:08 localhost dockerd: time="2018-03-07T15:59:08.547231472+08:00" level=debug msg="Trying to pull mysql from https://6jwksk60.mirror.aliyuncs.com/ v2"
Mar 7 15:59:23 localhost dockerd: time="2018-03-07T15:59:23.548000137+08:00" level=warning msg="Error getting v2 registry: Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:23 localhost dockerd: time="2018-03-07T15:59:23.548084051+08:00" level=info msg="Attempting next endpoint for pull after error: Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:23 localhost dockerd: time="2018-03-07T15:59:23.548133902+08:00" level=debug msg="Trying to pull mysql from https://registry-1.docker.io v2"
Mar 7 15:59:38 localhost dockerd: time="2018-03-07T15:59:38.548628804+08:00" level=warning msg="Error getting v2 registry: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:38 localhost dockerd: time="2018-03-07T15:59:38.548715275+08:00" level=info msg="Attempting next endpoint for pull after error: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
Mar 7 15:59:38 localhost dockerd: time="2018-03-07T15:59:38.548798878+08:00" level=error msg="Handler for POST /v1.35/images/create returned error: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
实际错误是:
Get https://6jwksk60.mirror.aliyuncs.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"
【定位过程】通过curl进行验证:curlhttps://6jwksk60.mirror.aliyuncs.com/v2/_catalog 是可以正常返回结果,说明服务没有问题
通过谷歌翻墙(百度不行,解决不了这个问题),一共大概有两种方式
1、设置dns,在/etc/resolv.conf,以及/etc/docker/daemon.json中增加dns。例如dns地址:8.8.8.8
2、设置docker代理(centos和ubuntu同样设置)
[root@localhost docker]# mkdir -p /etc/systemd/system/docker.service.d
[root@localhost docker]# cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
> [Service]
> Environment="HTTP_PROXY=http://proxy.example.com:80/" "HTTPS_PROXY=https://proxy.example.com:443/"
> EOF
[root@localhost docker]#
然后重启服务
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
查看配置
[root@localhost docker]# systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/ HTTPS_PROXY=https://proxy.example.com:443/
[root@localhost docker]#
设置完成后再进行docker pull就可以下载了。
【分析一下原因】
1、通过curl来判断服务是正常的,所以肯定是docker配置问题。
2、当前环境在公司内网,公司是有代理的,因此可以肯定是公司网络问题,通过谷歌搜索,最终确定需要为docker指定代理。
更多推荐
所有评论(0)