容器内必须用环境变量COMPOSER_CACHE_DIR,因其优先级最高、不依赖用户主目录,且可确保非root用户执行时仍生效;需设绝对路径、提前创建并挂载持久卷。

容器内必须用环境变量 COMPOSER_CACHE_DIR
在 Docker 或 CI 容器中,composer config --global cache-dir 基本无效——因为容器常以 root 启动,而 config --global 写入的是 root 的 ~/.composer/config.json,但后续命令可能由非 root 用户(如 www-data、gitlab-runner)执行,导致配置被忽略。唯一可靠方式是设环境变量:COMPOSER_CACHE_DIR,它优先级最高,且不依赖用户主目录。
- Linux/macOS/WSL:启动容器时加
-e COMPOSER_CACHE_DIR="/cache",或在Dockerfile中写ENV COMPOSER_CACHE_DIR="/cache" - Windows 容器:用
setx COMPOSER_CACHE_DIR "C:\cache"或 PowerShell 的$env:COMPOSER_CACHE_DIR="C:\cache" - 路径必须是绝对路径;
~、$HOME、.全部不解析 - 容器内该路径需提前创建并赋权,例如在
Dockerfile中:RUN mkdir -p /cache && chmod 755 /cache
缓存目录必须挂载为持久卷或绑定挂载
容器退出后,内部文件默认丢失。若不挂载,每次构建都等于从零缓存,完全失去意义。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地开发:运行时用
-v $(pwd)/.composer-cache:/cache,确保宿主机目录存在且可写 - GitHub Actions:
actions/cache@v4必须指定path: /cache,且key包含hashFiles('**/composer.lock')和 PHP 版本 - GitLab CI:在
before_script创建目录并设环境变量:mkdir -p $CI_PROJECT_DIR/.cache/composer && export COMPOSER_CACHE_DIR="$CI_PROJECT_DIR/.cache/composer" - 不要挂载到
/tmp或/run—— 某些镜像会清空这些路径
验证是否真生效,别信 config 输出
composer config --global cache-dir 在容器里大概率输出空或默认路径,因为它读的是配置文件,不是运行时实际路径。真正有效的检查方式只有一种:
- 运行
composer diag | grep "Cache directory",确认输出的路径和你设的COMPOSER_CACHE_DIR一致 - 执行
composer clear-cache -vvv,看日志里清理的是不是你的目标路径 - 跑一次
composer install -vvv,搜Writing into cache行,路径必须匹配 - PHP CLI 环境下运行
php -r "echo getenv('COMPOSER_CACHE_DIR');",确认变量已加载
多项目/多 PHP 版本共用缓存的风险
同一个缓存目录被不同 PHP 小版本(如 8.2 和 8.3)、不同 Composer 版本(v2 vs v3)或不同镜像源(packagist.org vs 阿里云)混用,会导致缓存静默失效——文件存在,但 Composer 拒绝读取,因为校验哈希不匹配。
- 推荐按组合隔离:例如
/cache/php8.2-composer2、/cache/php8.3-composer3 - 在 CI 脚本中动态生成路径:
export COMPOSER_CACHE_DIR="/cache/php${PHP_VERSION}-composer${COMPOSER_VERSION}" - 镜像源变更后,务必清旧缓存,否则新旧元数据冲突,
composer update可能卡在repo/https---mirrors.aliyun.com/packages.json

















