注意:

  • 以下操作仅适用于在公司内网条件下加速拉取外网的镜像的情况,即:需要连接外网,将配置改为外网(不使用内网代理)等。
  • 如果你就想通过内网和内网代理的方式拉取外网镜像,但是报了同样的错,那下面的步骤可能要反过来。比如DNS要从8888改回你内网应该用的DNS等等。

症状:

拉取镜像慢/拉取不了(无法联网)

  1. 关闭docker service (sudo systemctl stop docker),打开dockerd debug(sudo dockerd --debug)的条件下能够拉取(这时候可能是连的国外服务器,而不是国内镜像,即使你在dameon.json中配置了)
  2. 不关闭docker service拉取不了,报错:
Error response from daemon: Get nvcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

说明联网有问题。

  • 测试联网是否正常:
    sudo docker search sameersbn。如果联网有问题,会报错:
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.xxx.xxx.xxx:8080: server misbehaving

这里出现的IP地址可能就是你之前设置过的docker联网代理地址

解决:

  1. 提高速度:
  • 加入国内镜像源。连接这些镜像源的时候可能使用外网比使用公司内网(需要加代理)更快。
    动态获取阿里源
  1. 提高并发数
    https://blog.csdn.net/BigData_Mining/article/details/88871748

  2. 解决联网:去掉内网代理(这样才能更快连外网),

  • 在 ~/.bashrc和/etc/profile中注释掉代理设置,并source
  • 在 /etc/docker/dameon.json中设置dns为 8.8.8.8

dameon.json如下:

{
  "runtimes":{
  	"nvidia":{
  	"path": "nvidia-container-runtime",
  	"runtimeArgs":[]
  	}
  },
  "registry-mirrors": [
  "http://f1361db2.m.daocloud.io",
  "https://f3lu6ju1.mirror.aliyuncs.com",
  "http://hub-mirror.c.163.com",
  "https://a8qh6yqv.mirror.aliyuncs.com"
  ],
  "max-concurrent-downloads":20,
  "data-root": "/data/docker/lib/docker",
  "dns": ["8.8.8.8"]
}

  • 删除 /etc/systemd/system/docker.service.d/http-proxy.conf中的代理设置,这一步很重要。这个文件夹可能是自己之前新建的。docker可能不自带

  • 也可能是找不到hostname,这需要你在/etc/hosts中手动加入这些地址:
    1)通过dig @114.114.114.114 <some_host_name>找到地址(<some_host_name>)对应的IP 2)在/etc/hosts中加入这些地址和IP
    https://segmentfault.com/a/1190000016083023

  • 重启docker:1)sudo systemctl dameon-reload3)sudo systemctl restart docker2)service docker restart

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐