答案是dns解析失败导致“could not resolve host”,需先用ping验证域名解析,再通过curl确认镜像连通性,最后用composer install -vvv核对下载地址是否为国内镜像且配合clear-cache生效。

ping packagist.org 看是否解析失败
“Could not resolve host” 或 Connection timed out 开头的错误,90% 是 DNS 层没打通。别急着换 Composer 配置,先验证系统能否解析域名:ping packagist.org。如果返回 unknown host,说明 DNS 解析失败——此时换镜像、调超时都无效。
临时改 DNS 最快验证方式:
- Linux/macOS:运行 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
- Windows:在“网络适配器 → IPv4 属性 → DNS 服务器”手动填 8.8.8.8
改完立刻重试 ping packagist.org,通了再继续下一步。
curl -v https://mirrors.aliyun.com/composer/ 确认镜像连通性
即使 composer config -g repo.packagist 输出了阿里云地址,也不代表它真能用。DNS 解析成功后,必须手动验证镜像源是否可访问:curl -v https://mirrors.aliyun.com/composer/。
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
重点关注日志里两处:
- 出现 * Connected to mirrors.aliyun.com → TCP 建连成功
- 出现 * TLS handshake completed → HTTPS 握手通过
- 最终返回 HTTP/2 200 或 HTTP/1.1 200 OK → 源可用
若卡在 * Trying 240e:xx:xx:xx:xx:xx:xx:xx...,大概率是 IPv6 干扰,需加 COMPOSER_NO_IPV6=1 再试。
composer install -vvv 看第一行下载地址是否为国内镜像
配置镜像和清缓存必须一起做,否则 composer install 仍会从旧缓存里读取 packages.json 的原始地址。执行 composer clear-cache 后,再跑 composer install -vvv。
盯紧输出的第一行日志:
- ✅ 正确: Downloading https://mirrors.aliyun.com/composer/packages.json
- ❌ 错误:出现任何含 packagist.org 或 https://repo.packagist.org 的 URL
- 注意:腾讯云当前有效地址是 https://packagist.proxy.tencent.com/,mirrors.cloud.tencent.com/composer/ 已停用
COMPOSER_NO_IPV6=1 是绕过 DNS 回退卡顿的硬招
很多“卡住几秒又恢复”的现象,其实是系统先尝试 IPv6 地址(比如 2a02:f...),超时后再切 IPv4。每个请求多耗 1–2 秒,几十个包叠加就直接卡死。
临时启用 IPv4 强制模式:
- Linux/macOS:COMPOSER_NO_IPV6=1 composer install -vvv
- Windows PowerShell:$env:COMPOSER_NO_IPV6="1"; composer install -vvv
这不是长期方案,但能快速确认是否 IPv6 导致的 DNS 解析拖慢——如果开这个环境变量后飞快完成,就该查本地路由器或 ISP 的 IPv6 支持情况。










