常见错误排除:

首先要排除配置国内镜像源的原因,建议先配置镜像源,如果配置了镜像源还无法拉取镜像,就可以继续看
配置镜像源方法:阿里云配置加速网站:容器镜像服务 (aliyun.com)

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"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
#自己建了私有的镜像仓库,需要 dockerd 绕过代理服务器直连,那么配置 NO_PROXY 变量:
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com" 

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

[Service]
Environment="HTTP_PROXY=http://我的ip:10809"
Environment="HTTPS_PROXY=socks5://我的ip:10808"

需要注意一点,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 安装软件。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐