Docker+CodeIgniter+PHPUnit+GitHub Action缓存写入权限问题求助
解决方案:修复GitHub Action中CodeIgniter缓存目录写入权限问题
1. 修正Dockerfile的权限配置(核心)
先删除你之前添加的错误权限命令(尤其是RUN usermod -u 1000 root,修改root用户UID会彻底打乱系统权限逻辑),替换为以下清晰的权限设置:
# 设置工作目录 WORKDIR /var/www/html # 先复制依赖配置文件,利用Docker缓存优化构建速度(可选但推荐) COPY composer.json composer.lock ./ RUN composer install --no-dev --optimize-autoloader # 复制项目全部代码 COPY . . # 确保writable及子目录存在(如果你的项目代码里已包含这些目录,可省略此步) RUN mkdir -p writable/cache writable/session writable/uploads # 将writable目录的所有权交给www-data用户/组,确保该用户拥有写入权限 RUN chown -R www-data:www-data /var/www/html/writable/ # 设置目录权限为755(允许所有者读写执行,组和其他用户读执行),文件自动继承正确权限 RUN chmod -R 755 /var/www/html/writable/
2. 在GitHub Action工作流中用正确用户执行测试
默认docker exec会以root用户执行命令,但CodeIgniter的缓存目录所有者是www-data,部分框架的权限校验逻辑可能拒绝root用户写入。直接指定www-data用户执行测试命令即可:
# 你的GitHub Action工作流中运行测试的步骤 - name: Execute PHPUnit tests run: docker exec -u www-data api-php8 php vendor/bin/phpunit
3. 排查额外潜在问题
- 检查
.dockerignore文件:确保没有忽略writable目录,否则构建出的镜像里会缺少该目录,直接导致写入失败 - 验证CodeIgniter缓存配置:打开
app/Config/Cache.php,确认$cachePath设置为WRITEPATH . 'cache/'(对应/var/www/html/writable/cache/),缓存驱动配置正确 - 避免重复权限操作:不要在Dockerfile中多次执行
chown/chmod,这会导致权限覆盖和逻辑混乱
内容的提问来源于stack exchange,提问作者RealGreenDev
相关产品推荐
相关产品推荐

