- Docker Hub 直连超时 - 无法直接访问
registry-1.docker.io
- 阿里云镜像正常 -
xxxx.mirror.aliyuncs.com
可以正常访问(返回 HTTP/2 200)
这说明:
- 你的 ECS 到 Docker Hub 的直连被阻断(可能是网络策略或防火墙)
- 阿里云镜像加速器本身是正常的
解决方案:
1. 禁用 IPv6(避免连接 IPv6 地址导致超时):
bash
# 临时禁用 IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
# 永久禁用(编辑配置文件)
sudo tee -a /etc/sysctl.conf <<-'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
EOF
sudo sysctl -p
2. 更新 Docker 配置,使用国内镜像源:
bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://xxxxx.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com"
],
"ipv6": false,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
3. 重启 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 5 "Registry Mirrors"
4. 重新尝试拉取镜像:
bash
docker pull maven:3.8.6-amazoncorretto-17
5. 如果还是不行,使用镜像代理站:
bash
# 直接从 DaoCloud 镜像站拉取
docker pull docker.m.daocloud.io/library/maven:3.8.6-amazoncorretto-17
# 然后重新打标签
docker tag docker.m.daocloud.io/library/maven:3.8.6-amazoncorretto-17 maven:3.8.6-amazoncorretto-17
试试禁用 IPv6 后再拉取镜像,应该就可以了。如果还有问题,把执行结果发给我
分析。
1. 检查镜像加速器是否正常工作
bash
# 测试阿里云镜像是否可访问
curl -I https://xxxx.mirror.aliyuncs.com/v2/
# 如果返回 401 Unauthorized 说明镜像服务是正常的
2. 尝试使用其他国内镜像源
编辑 Docker 配置文件:
bash
sudo vim /etc/docker/daemon.json
替换或添加以下内容(多个镜像源提高成功率):
json
{
"registry-mirrors": [
"https://xxx.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://dockerproxy.com"
]
}
重启 Docker 服务:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 检查网络和防火墙设置
bash
# 检查是否能访问 Docker Hub
curl -I https://registry-1.docker.io
# 检查 DNS 解析
nslookup registry-1.docker.io
# 如果 DNS 有问题,可以修改 /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 223.5.5.5" | sudo tee -a /etc/resolv.conf
4. 检查阿里云 ECS 安全组规则
确保出站规则允许访问:
- 端口 443 (HTTPS)
- 目标地址不受限制
5. 直接使用阿里云容器镜像服务
如果你有阿里云账号,可以使用阿里云容器镜像服务搜索并拉取镜像:
bash
# 先在阿里云容器镜像服务搜索 maven 镜像
# 然后使用阿里云的完整路径拉取
docker pull registry.cn-hangzhou.aliyuncs.com/library/maven:3.8.6-amazoncorretto-17
6. 临时解决方案:增加超时时间
修改 Docker 配置:
json
{
"registry-mirrors": [
"https://dz4ys44m.mirror.aliyuncs.com"
],
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 3,
"max-download-attempts": 5
}
nslookup
命令不存在,我们可以用其他方式测试。先安装工具或使用替代命令:
方案1:使用 dig
或 host
命令(如果有)
bash
# 尝试 dig
dig registry-1.docker.io
# 或者 host
host registry-1.docker.io
方案2:安装 bind-utils
包
bash
# CentOS/RHEL
sudo yum install -y bind-utils
# 安装后再执行
nslookup registry-1.docker.io
方案3:直接用 ping
和 curl
测试
bash
# 测试 DNS 解析和网络连通性
ping -c 4 registry-1.docker.io
# 测试 HTTPS 连接
curl -v https://registry-1.docker.io
# 测试阿里云镜像
curl -v https://xxxx.mirror.aliyuncs.com/v2/
建议直接执行以下步骤:
1. 先更新镜像配置(最重要):
bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.nju.edu.cn",
"https://xxx.mirror.aliyuncs.com"
]
}
EOF
2. 重启 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 验证配置:
bash
docker info | grep -A 5 "Registry Mirrors"
4. 再次尝试拉取镜像:
bash
docker pull maven:3.8.6-amazoncorretto-17