docker构建国内镜像服务

       在国内想要下载镜像比较困难,因此很多公司都构建自己的私有仓库。如何搭建私有仓库,请参考docker私有仓库从无到有》。然而即使私有仓库服务构建完成,但是里面没有镜像,一样很苦恼。今天介绍一下如何利用国内云服务商提供的镜像加速器,来快速下载镜像。

  目前国内docker镜像加速器服务商,质量比较好的有阿里云、DaoCloud以及Docker中国。

它们配置都是相同,获取专属加速地址,然后将地址写到docker配置文件/etc/docker/daemon.json中。

一、阿里云加速地址:

     1、注册阿里云账号,如果有淘宝号也是可以的。https://dev.aliyun.com/search.html

  2、注册并登陆成功之后,进入之后点击管理中心

  3、进入管理中心,默认业务就是下图,然后在选择镜像加速器,里面就是专属加速地址,并且有配置方法。


 DaoCloud配置方式与阿里云类似,只是服务商不一样罢了。

二、 Docker 中国

  如果不想注册阿里云,那么可以使用Docker中国提供的服务。

扫描二维码关注公众号,回复: 1766655 查看本文章

  可以将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代理(centosubuntu同样设置)

   [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指定代理。



猜你喜欢

转载自blog.csdn.net/xxb249/article/details/79469534