根本解法是将 Composer 缓存目录设为持久化路径,如执行 composer config -g cache-dir ~/.composer/cache 和 composer config -g data-dir ~/.composer,避免系统自动清理 /tmp 导致缓存丢失、锁文件冲突及重复下载。

Composer 在系统临时目录(如 /tmp)被自动清理后,会因找不到缓存文件或锁文件而报错,典型现象是执行 composer install 或 composer update 时卡住、提示 Could not delete ... cache files 或直接抛出 file_put_contents(/tmp/...): failed to open stream。根本解法不是反复重试,而是让 Composer 使用你可控的、不被系统清理的持久化缓存目录。
为什么默认缓存放在 /tmp 会出问题
Linux/macOS 系统(尤其是 systemd 管理的发行版)常配置 systemd-tmpfiles 定期清理 /tmp,默认保留时间通常为 10 天或更短;Docker 容器中 /tmp 更可能随容器重启清空。Composer 的 cache-dir 和 data-dir 若未显式指定,就会 fallback 到系统临时路径,一旦被删,下次运行就要重新下载包、重建索引,还容易因残留锁文件引发冲突。
如何设置 Composer 持久化缓存目录
用 composer config 命令全局或项目级覆盖默认路径,推荐全局设置(避免每个项目重复配置):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer config -g cache-dir ~/.composer/cache—— 将缓存文件(zip 包、dist 归档、metadata)存到用户主目录下稳定路径 - 同时建议设
composer config -g data-dir ~/.composer—— 统一数据根目录,避免插件、keys、auth.json 等散落在系统临时区 - 验证是否生效:运行
composer config -g --list | grep -E "(cache-dir|data-dir)",确认输出是你指定的路径 - 已有
/tmp/composer*锁文件残留?手动删掉:rm -rf /tmp/composer*(仅限当前用户可写且无其他 Composer 进程在跑时)
composer install 仍报错:检查是否被 COMPOSER_CACHE_DIR 环境变量覆盖
某些 CI 环境(如 GitHub Actions、GitLab CI)或 Docker 启动脚本会预设 COMPOSER_CACHE_DIR 环境变量,它优先级高于 config 设置,会导致你配的 cache-dir 被忽略。排查方式:
- 运行
echo $COMPOSER_CACHE_DIR,若非空,说明环境变量正在起效 - 临时绕过:执行
COMPOSER_CACHE_DIR= composer install(置空该变量)再试 - 长期修复:在 CI 配置中移除该变量赋值,或明确设为你的持久路径,例如
COMPOSER_CACHE_DIR="$HOME/.composer/cache" - 注意:Docker 中若用了
VOLUME挂载/tmp,也需同步挂载~/.composer/cache并确保权限正确(UID 匹配)
最关键的细节是:缓存目录必须对当前运行 Composer 的用户可读写,且不能位于被 tmpwatch、systemd-tmpfiles --clean 或云平台自动清理策略覆盖的路径下。设到 ~/.composer 是最简可靠的方案,但如果你在共享服务器或受限容器里,得确认 $HOME 本身是否持久——否则就换到挂载的卷路径,比如 /var/lib/composer-cache,并确保目录存在且 chown 正确。

















