composer install 报 connection refused 是因无法连接 packagist.org 或配置的仓库,根源通常是网络不通(代理、防火墙、dns 污染)或配置错误(私库挂掉、disable-tls true、镜像源无效)。

composer install 报 connection refused 是什么情况
根本不是 Composer 本身坏了,而是它默认去连 packagist.org(或你配置的仓库),但网络没通过去——可能是本地代理、公司防火墙、DNS 污染,或者你手动改过 composer.json 里的 repositories 指向了一个挂掉的私库。
怎么快速确认是网络问题还是配置问题
先绕过 Composer 做一次最简测试:用 curl -v https://packagist.org/packages.json 看是否也报 Connection refused。如果 curl 同样失败,说明是系统级网络问题;如果 curl 成功但 composer install 失败,大概率是 Composer 自己的配置在捣鬼。
- 检查是否启用了代理:
echo $HTTP_PROXY、echo $HTTPS_PROXY,有输出就试试临时清空:unset HTTP_PROXY HTTPS_PROXY - 检查 Composer 是否被强制指定了私库:
composer config --list | grep repositories,重点关注repositories.0.url - 看是否全局禁用了 HTTPS:
composer config -g disable-tls true—— 这会导致它试图走 HTTP,而 packagist 已全站强制 HTTPS,直接被拒绝
国内环境下最稳的临时解法
别折腾代理或 hosts,直接切镜像源。Packagist 官方不提供国内镜像,但阿里、腾讯、华为都维护了兼容接口的镜像服务,Composer 能无缝切换。
- 切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 切腾讯云镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 切回官方源(调试用):
composer config -g --unset repos.packagist
注意:repo.packagist 是固定写法,不是变量名;路径末尾的斜杠不能少,否则会报 Invalid repository type。
为什么换源后还报 connection refused
常见于 CI/CD 环境或 Docker 容器里——镜像源地址虽然对了,但容器根本没外网权限,或者 DNS 解析失败。这时候 connection refused 实际是 DNS 返回空响应后 TCP 连接超时的误报。
- 进容器执行:
nslookup mirrors.aliyun.com,如果查不到 IP,说明 DNS 配置有问题 - Docker 用户检查是否用了
--network=none或自定义 network 且没配好 DNS - 某些企业 K8s 集群会拦截所有外部 HTTPS 请求,得联系运维开白名单,光换源没用
真正卡住的地方往往不在 Composer 配置本身,而在它背后那层看不见的网络策略。盯着错误信息里的 IP 和端口没用,得从 curl 和 nslookup 开始一层层剥。










