composer断网后仍报错是因为它不会自动降级为离线模式,必须显式设置composer_disable_network=1,否则install强制请求https://repo.packagist.org/packages.json,无论网络不通是curl error 60还是could not resolve host,本质都是未进入离线逻辑。

离线环境不能靠“断网”自动生效,必须提前设 COMPOSER_DISABLE_NETWORK=1 并禁用 Packagist 源,否则 composer install 一定会失败。
为什么 composer install 在断网后仍报错?
Composer 不会因网络不通就降级为离线行为。只要没显式禁用网络,它仍会强制请求 https://repo.packagist.org/packages.json,错误可能是 Curl error 60 或 Could not resolve host,但本质一样:它根本没进离线逻辑。
常见误判点:
- 只运行
ip link set eth0 down就以为“已离线”,结果命令一跑还是连不上 - 以为
vendor/和composer.lock都存在就万事大吉,其实 install 阶段仍校验远程元数据 - 漏设
COMPOSER_DISABLE_NETWORK=1,导致所有--no-xxx参数失效
离线镜像构建:怎么把 Composer 二进制打进 Docker 镜像?
基础镜像(如 php:8.3-cli)默认不带 Composer,apt install composer 会触发网络下载,直接失败。正确做法是把它当静态资产 baked 进去。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 在联网机执行:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');",再运行php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 确认生成的是普通 PHP 脚本(非 Phar),否则某些离线环境因缺少
phar扩展报错 - Dockerfile 中用
COPY composer /usr/local/bin/composer,别用RUN curl | php - 必须加
RUN chmod +x /usr/local/bin/composer,否则容器内执行报Permission denied
离线运行时必须加的硬性配置和命令参数
光有二进制不够,Composer 运行时仍可能尝试联网查包信息。必须从环境变量和配置两层切断:
- 全局禁用 Packagist:
RUN composer config --global repo.packagist false - 强制关闭网络:
ENV COMPOSER_DISABLE_NETWORK=1(必须写在 Dockerfile 里,或启动容器前export) - 离线安装最小安全命令:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - 执行完立刻补:
composer dump-autoload -o,否则运行时报Class not found
如果项目用了 "type": "path" 仓库,确保对应目录存在且含合法 composer.json;若 composer.lock 里有 "source": {"type": "git"},这种锁文件天生不支持离线,必须重生成。
本地仓库怎么配才真离线?artifact vs path
改 repo.packagist 地址为内网镜像不是真离线——Satis 或其他 Web 服务仍需 HTTP 访问。要完全无网,只能用 artifact 或 path 类型。
-
artifact:预置命名规范的.tar.gz(如monolog/monolog-2.13.0.tar.gz),放同一目录下,再运行composer config repositories.offline '{"type":"artifact","url":"/opt/artifacts/"}' -
path:用于本地开发包,要求源码目录含完整composer.json,且require时必须加@dev(如composer require my-utils/my-utils:@dev) - 两种方式都必须同时执行:
composer config --global repo.packagist false,否则 fallback 机制仍会触发 DNS 查询
最容易被忽略的是:composer install -v 输出里一旦出现 Downloading https://repo.packagist.org/packages.json,说明某处配置没生效——不是路径写错,就是全局/项目级配置冲突了。










