必须执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(末尾斜杠不可少),并验证输出为 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},因容器不继承宿主机配置且 composer 2.2+ 默认直连 packagist.org。

容器里 composer install 卡在 Loading composer repositories 怎么办
这不是网络慢,是根本没配镜像源,Composer 2.2+ 默认直连 packagist.org,而国内容器里根本连不上。必须在 Dockerfile 的 RUN 阶段显式配置。
-
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/—— 注意末尾有/,且不能漏掉composer类型标识 - 验证是否生效:
RUN composer config -g repo.packagist输出必须是完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 别指望宿主机的
~/.composer/config.json自动透传进容器——它不会 - 如果用了多阶段构建,每个含
composer的阶段都得单独配一次,--from=builder不继承配置
Dockerfile 中 COPY 和 RUN 的顺序为什么决定构建速度
顺序错一丁点,整个 vendor 层缓存就废了,每次 CI 都重下包、重解压、重生成 autoload。缓存链只对最敏感的三步生效。
- 必须严格按顺序:
COPY composer.json composer.lock ./→RUN composer install --no-dev --optimize-autoloader - 中间插任何指令(比如
RUN chmod、RUN mkdir)都会打断缓存 -
COPY . /app必须放在COPY composer.*之后,否则代码一改,前面所有依赖层全失效 - 没固定
COMPOSER_CACHE_DIR又没启用 BuildKit 缓存挂载,等于每次下载全量包
Alpine 镜像里 composer install 报 SSL certificate problem 怎么解
Alpine 默认没装 CA 证书链,curl 和 Composer 都会因证书校验失败中断,错误信息通常是 SSL certificate problem: unable to get local issuer certificate。
- 构建阶段加:
RUN apk add --no-cache ca-certificates,这是必须项 - 别信
php:alpine镜像自带完整证书——它不带 - 如果用
composer/ca-bundle,路径是vendor/composer/ca-bundle/res/cacert.pem,但不如直接系统级补证书来得稳 - 运行时镜像也得有
ca-certificates,否则file_get_contents('https://...')同样失败
为什么 php-fpm 容器启动时报 Class not found 却找不到原因
常见现象是 composer install 在构建阶段看似成功,但运行时类加载失败。本质不是 autoload 没生成,而是环境错位。
-
composer.lock是按构建环境生成的,如果 builder 镜像用php:8.2-cli,runner 用php:8.2-fpm-alpine,两者扩展差异(比如ext-zip缺失)会导致某些包的 autoloader 生成异常 - 必须在
composer.json顶部加"config": {"platform": {"php": "8.2.15"}},锁定 PHP 版本,否则 Composer 可能装入仅兼容 8.3 的语法 - 验证命令:
RUN composer show --platform输出应与最终运行镜像完全一致 -
--no-autoloader放构建阶段,RUN composer dump-autoload --optimize留给 final 阶段执行,避免路径错位
mbstring,json_encode() 对中文都可能返回 null,且无明确报错。











