卡在“Loading composer repositories”主因是DNS解析慢或TLS握手失败;须用nslookup实测DNS耗时,验证composer diagnose首行URL确认镜像是否生效,并排查systemd-resolved等静默干扰项。

直接测DNS解析耗时,别信ping返回时间
ping测的是ICMP往返,和Composer走的DNS解析路径无关。真正影响composer install卡在Loading composer repositories的,是getaddrinfo()系统调用——它查的是/etc/resolv.conf里配置的DNS服务器能否快速返回A记录。
用这条命令实测(Linux/macOS):time nslookup mirrors.aliyun.com 114.114.114.114time nslookup mirrors.aliyun.com 8.8.8.8
- 重复5次取最小值,比平均值更能反映DNS服务本身能力
- 若
114.114.114.114耗时稳定在20ms内,而8.8.8.8动辄200ms+,说明本地网络对Google DNS有路由绕行或QoS限速 - 结果里出现
server can't find或超时,基本可判定该DNS不可用,不是Composer问题
看composer diagnose输出的第一行真实请求URL
很多人改了repos.packagist.org却没生效,是因为composer diagnose第一行会明确打印“Checking HTTP connectivity to packagist.org”,这个packagist.org就是它实际去连的域名——不是你配的镜像地址,而是最终解析目标。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果这行显示
https://packagist.org,说明全局配置失效,大概率是项目级composer.json里写了"repositories": []或空对象,直接屏蔽了全局设置 - 如果显示
https://mirrors.aliyun.com/composer/但依然慢,说明DNS已生效,问题在后续TLS握手或CDN节点调度 - 运行
composer diagnose -v还能看到具体用了哪个DNS resolver(如system或curl),确认是否被systemd-resolved劫持
抓包验证DNS是否真被绕过
加/etc/hosts硬编码IP后,strace能立刻告诉你DNS有没有被跳过:
strace -e trace=connect,sendto,recvfrom composer diagnose 2>&1 | grep -E "(connect|sendto|114.114.114.114)"
- 优化前:你会看到大量
sendto发往127.0.0.53(systemd-resolved)或114.114.114.114的UDP包 - 优化后(hosts生效):
connect直接连到223.6.6.6的TCP端口,sendto消失——说明完全跳过了DNS查询 - 注意:
hosts只对glibc生效,Alpine容器里默认用musl libc,需额外装ca-certificates并确认/etc/nsswitch.conf含hosts: files dns
别漏掉systemd-resolved这个静默干扰项
Ubuntu/Debian系虚拟机或WSL2里,systemd-resolved常偷偷把/etc/resolv.conf指向127.0.0.53,哪怕你手动改了resolv.conf也会被覆盖。
- 检查是否启用:
systemctl is-active systemd-resolved - 停用并删掉软链:
sudo systemctl disable --now systemd-resolved && sudo rm /etc/resolv.conf && echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf - 验证是否生效:
cat /etc/resolv.conf必须只含你写的nameserver,且ls -l /etc/resolv.conf不能是软链接 - 不干这步,
resolv.conf改得再准也没用——它根本不会被读
composer install总耗时,而要看从执行命令到第一条Downloading日志之间的时间差。这个间隙几乎全由DNS+TLS握手决定,其他环节(如解压、classmap生成)都是后续阶段。

















