国内直连 packagist.org 因境外路由、DNS 解析慢、TLS 不稳及 CDN 距离远导致 composer install 卡在 downloading;应切换阿里云等镜像源,并检查 CA 证书、DNS 和 php.ini 配置。

为什么 composer install 卡在 downloading(尤其是 packagist.org)
国内直连 packagist.org 会走境外路由,DNS 解析慢、TLS 握手不稳定、CDN 节点远,导致下载时长波动极大,甚至超时失败。这不是你网络差,是默认源物理距离太远。
实操建议:
- 临时切镜像源:运行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)或更可靠的composer config -g repo.packagist composer https://packagist.proxy.tencent.com - 推荐用阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果项目已 lock,改完源后务必删掉
vendor/和composer.lock再composer install,否则仍可能复用旧下载地址
composer update 太慢,是不是必须重下所有包?
不是。默认 composer update 会重新解析全部依赖树并尝试升级到最新兼容版本,触发大量远程元数据请求(packages.json),这才是卡顿主因,不是下载本身。
实操建议:
- 只更新某几个包:用
composer update monolog/monolog guzzlehttp/guzzle,跳过全量分析 - 禁用自动更新 lock:加
--no-update参数先改composer.json,再单独跑composer update --lock - 关掉冗余日志:
composer update -q(quiet 模式)能减少 I/O 等待,对 CI 环境明显
用了镜像源还是慢?检查这三件事
镜像源只是第一步,本地环境和配置不当照样拖垮速度。
常见错误现象:
- 执行
composer diagnose报curl: (60) ssl certificate problem→ 说明 CA 证书过期或 curl 配置异常,会反复重试 -
composer show响应极慢 → 可能 DNS 被污染,试试加--dns=114.114.114.114(仅 Composer 2.5+ 支持) - PHP 的
openssl.cafile未设置 → 在php.ini中补上真实路径,比如openssl.cafile=/etc/ssl/certs/ca-certificates.crt
性能影响:未校验证书或 DNS 不稳时,单个包元数据请求可能耗时 10s+,叠加几十个包就成分钟级。
docker 构建里 composer install 反复慢?别硬扛
容器每次构建都重装 vendor 是最大浪费。镜像层缓存失效、无 DNS 优化、没复用已下载包,三者叠加必然慢。
实操建议:
- 把
composer install --no-dev --optimize-autoloader放在 Dockerfile 靠前位置,确保composer.lock变更才重建 vendor 层 - 挂载宿主机 Composer 缓存目录:
-v ~/.composer/cache:/root/.composer/cache,避免重复下载 - 在
FROM php:8.2-cli后立刻换源:RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
容易被忽略的是:Docker 默认 DNS 是 8.8.8.8,国内访问极不稳定,必须在 /etc/docker/daemon.json 里配 "dns": ["223.5.5.5", "114.114.114.114"] 才算真正生效。