答案:卡在Resolving dependencies是DNS解析失败,非网络慢或超时配置问题;应先用nslookup或dig验证DNS,再换公共DNS(如8.8.8.8)或直连镜像源(如https://mirrors.aliyun.com/composer/),并确保镜像配置正确、缓存已清。

Composer卡在Resolving dependencies就是DNS问题
看到命令停在Resolving dependencies不动,基本可以确定是DNS层卡住——不是Composer慢,是它连packagist.org的IP都还没查出来。这时候调http.timeout或process-timeout完全无效,因为根本没走到HTTP那步。
验证方法很简单:nslookup packagist.org或dig packagist.org +short。如果返回空或server can't find,说明DNS解析失败;如果返回IP但curl -I https://packagist.org仍卡住,则可能是防火墙或IPv6 fallback干扰。
- 公司/学校网络常屏蔽
packagist.org和github.com域名解析,换DNS(如8.8.8.8)比配镜像更优先 - Docker容器内默认继承宿主机DNS,但宿主机用systemd-resolved时,容器可能拿到127.0.0.53这种不可用地址
- IPv6 fallback会隐式增加延迟:先试IPv6地址(超时约2秒),再退到IPv4,上百个包叠加就是几分钟无响应
全局改DNS不如直接换镜像源
国内用户遇到DNS问题,最稳的解法不是修DNS,而是绕过DNS——用镜像源直连CDN IP,不走域名解析。阿里云、清华、华为云镜像都已预解析并缓存,curl -I https://mirrors.aliyun.com/composer/packages.json通常毫秒级返回。
注意几个易错点:
- 配置命令必须用
repos.packagist(不是repo.packagist),旧文档有拼写误导 - URL末尾必须带斜杠:
https://mirrors.aliyun.com/composer/,少一个/就404 - 执行后必须清缓存:
composer clear-cache,否则仍可能从本地缓存读取旧地址 - 检查是否被项目级
repositories覆盖:composer config repo.packagist(不加-g)
Docker里DNS失效的典型场景
在Docker Compose中跑composer install失败,90%不是镜像问题,而是容器DNS配置被忽略或冲突。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见坑:
-
network_mode: host下dns字段完全无效,得改宿主机DNS或用--dns参数启动 - 用了默认
bridge网络却没显式配dns,结果容器继承了不可靠的宿主机DNS(比如Windows WSL2的172.x.x.1) - 服务间调用依赖
dns_search,但没设svc.cluster.local等内网后缀,导致PHP cURL硬编码http://api失败 - DDNS-GO、Prometheus这类监控容器误配
dns字段,反而拖慢整个网络解析链
推荐做法:在docker-compose.yml的服务定义里明确写dns和dns_search,把内网DNS(如192.168.10.5)放首位,公网DNS(如114.114.114.114)作兜底。
CI/CD中DNS问题最难复现也最该固化
GitHub Actions、GitLab CI每次拉新容器,DNS环境都不一样——可能这次用GitHub的DNS,下次用Runner所在VPC的DNS。临时改/etc/resolv.conf或nslookup调试毫无意义。
真正可靠的方案是三层兜底:
- 第一步:全局镜像源+
COMPOSER_HTTP_TIMEOUT=1200环境变量(覆盖http.timeout) - 第二步:强制走zip分发:
composer config -g github-protocols https,避免触发git clone(它不受Composer控制) - 第三步:在CI脚本开头加诊断命令:
timeout 5 nslookup packagist.org || echo "DNS failed",失败立刻退出,别等5分钟超时
最隐蔽的是WSL2或某些K8s节点上resolv.conf被动态覆盖,这时光靠composer config解决不了——得在CI runner初始化阶段就注入稳定DNS。

















