卡在resolving dependencies主因是ipv6 fallback超时或镜像url末尾缺/,导致dns解析后http请求404重试;应禁用ipv6并严格确保镜像url以/结尾。

为什么DNS优化后还是慢
换完8.8.8.8或114.114.114.114,ping packagist.org通了,但composer install仍卡在Resolving dependencies——这大概率不是DNS本身慢,而是Composer默认先尝试IPv6地址,超时(通常1–3秒)再fallback到IPv4。上百个包叠加,就是几分钟无响应。
验证方法:curl -v https://packagist.org 2>&1 | grep "Connected to",如果看到类似Connected to packagist.org (2a03:2880:...)且后续卡住,基本就是IPv6 fallback在捣鬼。
- 临时禁用IPv6:启动命令加
--dns-ipv6=false(部分Docker版本支持) - 全局禁用(Linux/macOS):
echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf - Docker容器内更直接:启动时加
--sysctl net.ipv6.conf.all.disable_ipv6=1
怎样让Composer跳过DNS重复查询
Composer每次HTTP请求都会重新查一次DNS,尤其在拉取几十个provider文件时,反复解析mirrors.tuna.tsinghua.edu.cn会拖慢整体速度。它不复用连接,也不缓存DNS结果,除非你显式干预。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 加
--dns-cache-ttl=3600参数强制缓存1小时:composer update --dns-cache-ttl=3600 - 该参数只对当前命令生效,CI/CD中建议固化为环境变量:
COMPOSER_DNS_CACHE_TTL=3600 - 注意:它不影响
git clone阶段的DNS行为,那是Git自己管的
镜像URL末尾少一个/会怎样
清华、阿里等镜像源要求URL必须带末尾斜杠,比如https://mirrors.tuna.tsinghua.edu.cn/composer/。少一个/,Composer会把packages.json拼成https://mirrors.tuna.tsinghua.edu.cn/composerpackages.json,直接404。
这种错误不会报“找不到镜像”,而是表现为“Connection timed out”或“curl error 22”,因为404响应被当成网络失败重试多次。
- 检查是否生效:
composer config -g repo.packagist,输出的url字段值必须以/结尾 - 若已配错,先删掉:
composer config -g --unset repo.packagist,再重配 - 公司私有镜像同理,URL末尾
/是硬性要求,不是可选
DNS快了,但Downloading还在卡
确认DNS没问题后,如果日志停在Downloading https://...,说明问题已下移到HTTP层——这时候调http.timeout比折腾DNS更有效。
- 设为600秒:
composer config -g http.timeout 600 - 注意它只控制元数据请求(如
packages.json),不控制zip下载;后者走curl或git clone,需单独配置 - 若用
--prefer-dist,下载阶段实际走curl,此时http.timeout才真正起作用 - 搭配
--no-dev和--optimize-autoloader,能减少要下载的包数量和后续扫描开销










