解决docker pull被复位出现的问题

本文介绍了解决docker pull被复位出现的问题,分享给大家,具体如下:

例如:

$ docker pull ubuntu:16.04
Trying to pull repository docker.io/library/ubuntu ...
Get https://registry-1.docker.io/v2/library/ubuntu/manifests/sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fubuntu%3Apull&service=registry.docker.io: read tcp *.*.*.*:41348->50.17.62.194:443: read: connection reset by peer

原因:目测50.17.62.194被TCP重置。

解决方法:

1、找到其可用IP:

$ dig auth.docker.io

; <<>> DiG 9.10.4-P6-RedHat-9.10.4-4.P6.fc25 <<>> auth.docker.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7119
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;auth.docker.io.  IN A

;; ANSWER SECTION:
auth.docker.io. 60 IN A 34.193.147.40
auth.docker.io. 60 IN A 50.17.62.194
auth.docker.io. 60 IN A 52.5.246.212

;; Query time: 130 msec
;; SERVER: *.*.*.*#53(.*.*.*.*)
;; WHEN: Tue Mar 07 11:03:29 CST 2017
;; MSG SIZE rcvd: 91

2、改/etc/hosts强制docker.io相关的域名解析到其它可用IP:

# /etc/hosts
34.193.147.40 registry-1.docker.io auth.docker.io

顺便附上关于镜像的描述以及现在有哪些镜像提供商

首先,需要明确一个问题:Mirror 与 Private Registry 有什么区别?

抄自daocloud的说明:

二者有着本质的差别。

Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。 Mirror 是一种代理中转服务,我们(指daocloud)提供的 Mirror 服务,直接对接 Docker Hub 的官方 Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。 在使用 Private Registry 时,需要在 Docker Pull 或 Dockerfile 中直接键入 Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。 使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。

简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对我来说,由于我是要拖docker hub上的image,对应的是Mirror。 yum/apt的mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像(不管有没有用),并定时与官方做同步;而Docker mirror只会缓存曾经使用过的image。

目前国内访问docker hub非常便秘,使用docker mirror势在必行。现有提供服务的有三家:ustc、daocloud、aliyun,下面会一一介绍。

选择零:网易163 docker镜像

$ sudo echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
$ service docker restart

一般来说,网易的猪肉比市场上的猪肉好吃。

选择一:ustc的镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。之前在blog里有提到可以用ustc的docker仓库镜像,使用方法参考ustc docker 镜像使用帮助

ustc的docker镜像速度不错,一直用的挺happy。但是今天发现不好使了,可能跟这件事有关系吧,今天尝试去pull ubuntu,非常慢,应该是直接去docker hub上去拉了,基本没有加速效果。

ustc docker mirror的优势之一是,不需要注册,公共服务(这才是我熟悉的ustc嘛)。

选择二:daocloud

DaoCloud也提供了docker加速器,但是跟ustc不同,需要用户注册后才能使用,并且每月限制流量10GB。linux上使用比较简单,一条命令搞定:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io

实际改的是/usr/lib/systemd/system/docker.service,加了个–registry-mirror参数,:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=http://{your_id}.m.daocloud.io\

设置后,需要重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

但是!今天使用DaoCloud的docker加速器体验非常差,加速效果基本没感觉,果断放弃。

选择三:alicloud

阿里云也提供了docker加速器,不过比ustc更麻烦:不光要注册为阿里云的用户,还得加入开发者平台。不过捏着鼻子昨晚这些以后,它的服务还真是不错,基本1MB/s的pull速度(部分原因可能是因为我也在杭州吧)。配置方法跟daocloud类似,也是开通加速器以后给一个url。

我直接去改/usr/lib/systemd/system/docker.service了:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://{your_id}.mirror.aliyuncs.com\

重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

pull的时候还是显示docker.io,但速度一点都不docker.io。

# docker pull ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
cad964aed91d: Pull complete
3a80a22fea63: Pull complete
50de990d7957: Pull complete
61e032b8f2cb: Pull complete
9f03ce1741bf: Pull complete
Digest: sha256:28d4c5234db8d5a634d5e621c363d900f8f241240ee0a6a978784c978fe9c737
Status: Downloaded newer image for docker.io/ubuntu:latest

综上,虽然aliyun docker mirror有这样那样的不爽,但的确是目前最好的服务。当然,等ustc恢复正常了,我还是会切到ustc的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解如何干净的卸载docker的方法

    先上服务器环境信息: 卸载的原因: 宿主机过段时间就磁盘100%了,导致continart异常退出,后来找了很多解决方案,才发现是安装docker的时候有个配置文件错误(正常的应该是|Storage Driver: overlay2). 上干货: ①卸载 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docke

  • docker pull镜像速度慢的问题解决方法

    目前,Docker拥有中国的官方镜像,具体内容可访问https://www.docker-cn.com/registry-mirror 在使用时,Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问.该镜像库只包含流行的公有镜像.私有镜像仍需要从美国镜像库中拉取. 您可以使用以下命令直接从该镜像加速地址进行拉取: $ docker pull registry.docker-cn.com/myname/myrepo:mytag 例如: $ docker pull

  • 浅析Docker私有镜像库与阿里云对象存储 OSS

    Docker私有镜像库 Docker 私有镜像库与阿里云对象存储 OSS 镜像管理是 Docker 的核心,为了满足企业或组织内部分享镜像,Docker 官方在 Github上 建立了一个开源项目 docker-registry,专门用于自建 Docker 的私有镜像库. 快速启动支持阿里云对象存储 OSS 的 docker-registry 您可以从 https://github.com/docker/docker-registry 下载并安装 docker-registry,通过 pip 安

  • 浅谈docker-compose网络设置之networks

    networks使用方式之官网教程 官网的docker-compose.yml参考文档:Compose file version 3 reference 较为准确的中文翻译版:Compose file version 3 reference networks通常应用于集群服务,从而使得不同的应用程序得以在相同的网络中运行,从而解决网络隔离问题.这种应用在swarm部署中,非常常见.不过,本文并不做讨论. 一般对于集群服务,常常通过docker-compose.yml文档快速编排.部署应用服务.官

  • 使用Docker安装phabricator的配置和使用方法

    我这里使用的是ubuntu16.04的系统. 使用docker进行安装 我们使用https://hub.docker.com/r/redpointgames/phabricator/ 中提供的镜像. 在则这个镜像中已经为我们提供了多种插件,不过需要我们自己提供一个mysql数据库的地址. 所以我们可以先使用docker安装一个mysql数据库.可以参考:https://www.jb51.net/article/148880.htm 按照上面的教程,我们安装了mysql,账号为root,密码为12

  • 使用Docker Swarm搭建分布式爬虫集群的方法示例

    在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更新? 有时候爬虫只需要在一个服务器上面运行,有时候需要在200个服务器上面运行.你是怎么快速切换的呢?一个服务器一个服务器登录上去开关?或者聪明一点,在Redis里面设置一个可以修改的标记,只有标记对应的服务器上面的爬虫运行? A爬虫已经在所有服务器上面部署了,现在又做了一个B爬虫,你是不是又得依次

  • Docker创建运行多个mysql容器的方法示例

    1.使用mysql/mysql-server:latest镜像快速启动一个Mysql实例 docker run --name ilink_user_01 -e MYSQL_ROOT_PASSWORD=123456 0d 0p 3307:3306 mysql/mysql-server:latest ilink_user_01是容器名称,通过--name指令指定 123456为数据库root的密码,通过-e指定环境MYSQL_ROOT_PASSWORD为123456,-e (指定容器内的环境变量)

  • docker 搭建Mysql集群的方法示例

    docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 service docker start service docker stop 搜索镜像 docker search 镜像名称 下载镜像 docker pull 镜像名称 查看镜像 docker images 删除镜像 docker rmi 镜像名称 运行容器 docker run 启动参数 镜像名称 查看容

  • Docker容器内不能联网的6种解决方案

    Docker容器内不能联网的6种解决方案 注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.8.8.8) 1.使用–net:host选项 sudo docker run --net:host --name ubuntu_bash -i -t ubuntu:latest /bin/bash 2.使用–dns选项 sudo docker run --dns 8.8.8.8 --dns 8.8.4.4 --name ubunt

  • docker nginx 运行后无法访问的问题解决

    ## 1 最近在学docker部署,一开始打算将nginx先docker化的. 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是屏蔽了default.conf,以及include文件夹 sites-available # include /etc/nginx/conf.d/.conf; include /etc/nginx/sites-available/; 官方原先配置 user nginx; worker_process

  • Docker安装常用组件(mysql,redis)的方法

    docker安装mysql docker search mysql 搜索 docker pull mysql:5.6 下载 docker images |grep mysql 查看 docker run -p 3306:3306 --name mysql_docker -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysq

随机推荐