改dns比换镜像源更管用,因为卡在“loading composer repositories”阶段90%是dns解析失败导致无法获取ip,镜像url再快也无效;需优先修改系统dns或hosts文件预置域名ip,并验证生效。

为什么改DNS比换镜像源还管用
因为 Composer 卡在 Loading composer repositories 阶段,90% 不是下载慢,而是根本连不上域名——packagist.org、github.com 解析失败或超时。镜像源 URL 再快,DNS 查不到 IP 也白搭。
常见现象:composer install -vvv 日志停在 Resolving dependencies 前,或报 cURL error 6: Could not resolve host: packagist.org;ping packagist.org 返回 unknown host。
- 优先改系统级 DNS:编辑
/etc/resolv.conf,只留两行:nameserver 114.114.114.114和nameserver 223.5.5.5 - 禁用
systemd-resolved(Ubuntu/Debian/CentOS 8+):它会偷偷覆盖resolv.conf,执行sudo systemctl disable --now systemd-resolved - 别信宿主机 DNS 继承——虚拟机、Docker 容器里默认继承的 DNS 往往被劫持或响应慢,硬编码才可靠
hosts 文件预置关键域名 IP 是最快兜底方案
当 DNS 仍不稳定(比如公司内网屏蔽了递归查询),直接把域名和 IP 绑死是最稳的 fallback。注意不是所有 IP 都长期有效,得用当前可用地址。
验证方式:curl -I https://mirrors.aliyun.com/composer/ 看响应头里的 Server 或 X-Proxy-Cache,再用 dig mirrors.aliyun.com +short 或国外 VPS ping 获取真实 IP。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 往
/etc/hosts添加(IP 以实测为准):223.6.6.6 mirrors.aliyun.com223.6.6.6 packagist.org140.82.114.4 github.com185.199.108.133 githubusercontent.com - 加完立刻生效,无需重启服务;但要注意:如果镜像站 IP 变更,
composer update会直接 404,需定期检查 - Windows 用户改
C:\Windows\System32\drivers\etc\hosts,记得用管理员权限保存
Composer 镜像源配置必须全局且验证生效
只在项目 composer.json 里写 repositories 没用——composer create-project、composer global require 全部绕过它,仍走默认源。
必须用 config -g 全局设置,并确认字段名对得上版本:
- Composer 2.2+(主流):
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ - Composer 1.x 或旧版 2.x:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意是repo.packagist,不是repos.packagist) - 验证是否写入:
composer config -g repos.packagist(2.2+)或composer config -g repo.packagist(1.x),输出应为完整 URL - 清华源必须带末尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/composer/,少一个/就 404
Docker 和虚拟机里额外要防的三个坑
容器和虚拟机环境 DNS 问题更隐蔽,光配 Composer 不够,底层网络栈才是瓶颈。
- 在
docker-compose.yml中,不要只靠宿主机 DNS——显式写dns字段:dns: ["114.114.114.114", "8.8.8.8"],并避开network_mode: host(此时dns字段无效) - VirtualBox/VMware 虚拟机中,禁用
systemd-resolved后,还要关掉「启用 DNS 代理」这类 GUI 设置,否则它会重启并覆盖resolv.conf - 别在挂载的宿主机目录(如
/Users/xxx/project → /var/www)里直接跑composer install——文件系统桥接层会让unzip和file_put_contents慢 5–10 倍,复制进本地磁盘再执行
真正卡住的地方往往不在 Composer 日志里显示的那行命令,而在 DNS 查询超时后自动 fallback 到 IPv6、再等 3 秒重试——这种“没报错却卡住”的情况,curl -v https://packagist.org 2>&1 | grep "Connected to" 才能一眼揪出。










