docker无法拉取(pull)镜像 | 校园网 | 内网 | 代理 | Error response from daemon: Get https://registry-1.docker.io/v2

慵懒的小林 2024-07-10 12:07:05 阅读 52

常见错误排除:

首先要排除配置国内镜像源的原因,建议先配置镜像源,如果配置了镜像源还无法拉取镜像,就可以继续看

配置镜像源方法:阿里云配置加速网站:容器镜像服务 (aliyun.com)

<code>vim /etc/docker/daemon.json #自己编辑添加镜像源

# 或者直接使用命令添加镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://yourID.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker


需求场景:

学生党一枚,校园网只能登录认证登录,学校服务器在内网里,让服务器上网:

1、登录校园网认证

2、走主机的代理。(自己的主机登录校园网认证,再让服务器走自己主机的代理)

# 简单的临时代理

export http_proxy=http://你的代理服务器ip:端口

export https_proxy=http://你的代理服务器ip:端口

值得注意的是,要设置好代理服务器,让局域网的设备,可以通过这个代理端口上网,建议找一下教程

如果有clash 和 v2rayN 那就可以很好很快的设置。


问题描述

使用校园网认证登录,也还是可以正常拉取镜像,但是使用代理的方式上网就不可以。

配置好代理之后,发现使用docker不能拉取镜像(可以使用yum安装软件,否则代理应该没有配置成功),报错:

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)


原因分析:

没有配置过docker配置文件

如果服务器是通过代理的方式进行上网,则需要格外的配置docker代理-即修改docker的配置文件。

docker拉取镜像的时候,不走系统配置的代理环境,所以需要单独配置它的代理文件。

已经配置过docker配置文件–执行过下面的操作还不能上网,但是第一次配置的时候是可以上网的

很可能是ip地址变了,注意检查代理服务器的ip地址和服务器配置的ip地址是否一致。


解决方案:

参考:如何配置docker通过代理服务器拉取镜像 - 醉马踏千秋 - 博客园 (cnblogs.com)

检查docker代理配置的俩个命令:

systemctl show --property=Environment docker #查看代理配置

# 或者

docker info #查看配置选项

1、步骤创建或者覆盖掉原来的docker默认配置

sudo mkdir -p /etc/systemd/system/docker.service.d #创建

vim /etc/systemd/system/docker.service.d/http-proxy.conf #创建或者修改这个文件

2、配置自己的代理环境

[Service]

Environment="HTTP_PROXY=http://proxy.example.com:80"code>

Environment="HTTPS_PROXY=https://proxy.example.com:443"code>

#自己建了私有的镜像仓库,需要 dockerd 绕过代理服务器直连,那么配置 NO_PROXY 变量:

Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com" code>

因为我里用v2ray开的代理,socks是默认的10808,http是10809,所以我的配置如下:

[Service]

Environment="HTTP_PROXY=http://我的ip:10809"code>

Environment="HTTPS_PROXY=socks5://我的ip:10808"code>

需要注意一点,https的代理端口不一定要和http一样,除非你确保https也走那个端口,不然走http端口协议有时候是不能处理https数据的,这也是导致配置完不能拉取镜像的原因之一

3、加载配置重启docker

sudo systemctl daemon-reload

sudo systemctl restart docker

docker info #查看有没有配置成功


题外话:更加具体的场景以及疑问

在校园网需要认证的情况下,只有以下俩种情况可以拉取镜像。

1、不修改docker代理配置文件,即docker不能配置代理,然后使用校园网登陆是可以直接拉取镜像的。

2、想让docker走代理上网,那就要配置docker的配置文件。因此要保证代理服务器配置正确,开放了端口并能上网。可以让配置相应的系统环境代理,看看是不是能通过那个代理上网。

疑问

1、登录校园网的情况下是可以ping通baidu.com,但是在走代理的情况下是ping不通,但是确实是可以上网的,可以通过wget、curl、yum安装软件等方法验证。才疏学浅,也不知道为什么和原因,可能是因为是校园网,所以运营商配置了什么的原因?希望有高人解答。

2、我曾搭建过socks代理让服务器通过主机上网,结果是可以通过wget获取网页信息,但是也不能ping通以及使用yum 安装软件。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。