在上次 docker 更新至 1.8.x 后,docker 默认使用 v2 版本的 registry api 来拉取镜像,目的是提供更安全更便捷的方式。

但是在 docker 1.8.1 的源码中,对于 api 的选择是这样的,先从设置的--registry-mirror=xxxxxxxx上去试探/v2,如果返回错误的话就会转而使用官方的/v2 api,当官方的/v2版本 api 再挂掉之后就会转而使用官方的/v1 api。

所以有段时间里国内的很多 docker hub 加速服务都出现了一定程度上的失效,不过架设一个 v2 版本的镜像也不是特别困难,只不过部署文档并没有在 Docker 官方网站上,而是在这里_(:з」∠)_开叔翻到的。

所以按照其中的mirror.md内容看来,部署起来也不是很困难,直接给出 docker-compose 文件了。

docker-compose.yml:

server:
    image: registry:2.1.1
    ports:
        - "5000:5000"
    volumes:
        - ./config-mirror.yml:/etc/docker/registry/config-mirror.yml
        - ./data:/var/lib/registry
    command:
        - /etc/docker/registry/config-mirror.yml

config-mirror.yml:

version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000
proxy:
    remoteurl: https://registry-1.docker.io

然后在 docker daemon 启动时加上对应的--registry-mirror就搞定了,缓存的 images 会出现在运行着 registry 容器的宿主机上。注意要带上对应的端口,必要时可以加一层反代,因为所有的过程都是 http 或者 https 的。