阿里云镜像可解决多数“Failed to download”问题,但需确认配置生效、同步正常且未被私有源或CI环境覆盖;须验证config.json内容、检查同步时间、排除缓存及扩展缺失等底层问题。

直接换阿里云镜像就能解决绝大多数“Failed to download”问题,但必须确认配置生效、同步正常、且没被私有源或CI环境覆盖。
确认当前镜像是否真的是阿里云
很多人执行了 composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ 就以为搞定了,其实可能根本没生效:
- 运行
composer config -g repos.packagist,输出必须是https://mirrors.aliyun.com/composer/—— 如果为空、是其他 URL 或报错,说明配置失败 - 检查
~/.composer/config.json文件里repositories字段是否正确写入,注意不是repo.packagist(少个s)这种拼写错误 - 如果项目根目录有
composer.json且含repositories段,它会覆盖全局配置;此时要改项目级配置,或删掉项目里的自定义源
阿里云镜像同步延迟导致新包找不到
你刚在 Packagist 上看到 laravel/pint 发了 v1.13.0,但在阿里云镜像站搜不到——这不是网络问题,是镜像还没同步。
- 手动打开
https://mirrors.aliyun.com/composer/,页面底部找「最后同步时间」,若超过 2 小时未更新,基本可判定滞后 - 用
composer show -p laravel/pint查本地镜像是否收录;若返回空,但 Packagist 页面能打开,就是镜像未同步 - 临时切回官方源验证:
composer config --global repo.packagist composer https://packagist.org,再composer require laravel/pint -vvv看是否成功
宝塔/CI 环境下阿里云镜像常被忽略
你在本地配好了阿里云镜像,但宝塔面板或 GitHub Actions 里跑 composer install 依然超时——因为这些环境根本不读你的全局配置。
- 宝塔需额外执行软链接和函数解禁:确认
putenv、proc_open、pcntl_signal未被禁用,并确保/usr/local/bin/php指向正确的 PHP CLI - GitHub Actions 必须显式写进 workflow:
run: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,不能依赖本地设置 - GitLab CI 同理,需在
.gitlab-ci.yml的before_script中重复配置
换镜像后仍失败?优先排查这三件事
换源不是万能解药。如果还卡在 Downloading … retrying …,别反复重试,先看底层:
-
composer clear-cache—— 缓存里可能存着损坏的 zip 包,不清理会一直复用失败文件 -
php -m | grep openssl—— 若无输出,说明 OpenSSL 扩展未启用,HTTPS 请求根本发不出去 -
curl -I https://mirrors.aliyun.com/composer/packages.json—— 直接测镜像站连通性,排除 DNS 或代理干扰
最易被忽略的是:镜像配置对了,但项目 composer.json 里写了私有源且排在 packagist 前面,Composer 会优先查私有源并 404,根本不会走到阿里云镜像那步。











