You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:50:17