缓存目录属主为root导致composer install失败,应先用ls -ld $(composer config --global cache-dir)确认归属,再执行sudo chown -r $user:$user修复所有权,禁用chmod -r 777。

缓存目录属主是 root,composer install 就会失败
报错里出现 Writing cache file ~/.composer/cache/repo/https---packagist.org/ 或类似路径,且末尾带 Permission denied,基本可断定是缓存目录所有权错配。Linux/macOS 的权限机制只认“属主”,不看“权限位”——哪怕目录是 777,只要属主是 root,普通用户照样写不进去。
立刻验证:ls -ld $(composer config --global cache-dir)
如果输出第一列含 root root(如 drwxr-xr-x 12 root root),问题就坐实了。
- 别用
chmod -R 777 ~/.composer/cache—— CI 工具会拒收、Git 提示ownership changed、后续composer update可能卡在半途 - 正确做法只有一条:
sudo chown -R $USER:$USER $(composer config --global cache-dir) - 如果
composer config --global cache-dir报错或为空,先跑composer config -g home确认COMPOSER_HOME是否指向/root/.composer或/var/www/.composer;若是,说明全局配置已被污染
COMPOSER_CACHE_DIR 临时覆盖能绕过全局污染
当 ~/.composer/cache 所有权修复困难(比如 CI 环境无 sudo 权限),最稳的应急方案是把缓存挪进项目本地目录,完全避开全局路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先创建并授权:
mkdir -p .composer-cache && chmod 700 .composer-cache - 再运行:
COMPOSER_CACHE_DIR="$(pwd)/.composer-cache" composer install - GitLab CI 示例:
before_script中加mkdir -p .composer-cache && chmod 700 .composer-cache,然后在script中设置环境变量 - 注意:这个变量只对当前命令生效,不会影响其他步骤;也不需要改
~/.composer/config.json
插件缓存和 auth.json 也常被忽略
全局缓存目录下有两个子路径容易被漏查:~/.composer/cache/plugins/ 和 ~/.composer/auth.json。它们可能因镜像源 token 配置或插件安装时用了 sudo 而变成 root 所有,导致后续 composer install --no-plugins 成功但 --with-plugins 失败。
- 单独检查:
ls -ld ~/.composer/cache/plugins/ ~/.composer/auth.json - 若属主异常,一并修复:
sudo chown $USER:$USER ~/.composer/auth.json和sudo chown -R $USER:$USER ~/.composer/cache/plugins/ -
auth.json权限必须严格:chmod 600 ~/.composer/auth.json,否则 Composer 会拒绝读取
Docker 和 CI 环境中缓存权限更脆
宿主机 UID 是 1000,容器却以 UID 0(root)运行,挂载卷后缓存目录就会继承 root 所有权。GitHub Actions 默认用非 root 用户,但基础镜像(如旧版 php:alpine)可能让 /tmp 或 ~/.composer 权限混乱。
- Docker 启动时加
user:1000或 Dockerfile 里加USER 1001 - CI 流水线开头加:
mkdir -p .composer-cache && chmod 700 .composer-cache,再设COMPOSER_CACHE_DIR="$PWD/.composer-cache" - 降低权限依赖:
composer install --no-plugins --no-scripts --no-autoloader - Alpine 下若卡在
Extracting archive,加-v看是否是 musl libc 解包静默失败
~/.composer/cache/repo/https---xxx/ 下某一层是 root,其余是普通用户)最难排查,ls -la ~/.composer/cache/repo/ 得逐层看。










