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

Bitbucket Pipeline运行Laravel测试报日志文件Permission denied错误

问题根因

在Pipeline脚本中执行chmod -R 777 storage修改的是Bitbucket Runner宿主机上的目录权限,但Laravel服务实际运行在Sail拉起的Docker容器内部,宿主机的权限修改不会作用于容器内挂载的/var/www/html目录。容器内运行PHP进程的用户默认是UID为1330的sail用户,对容器内的storage、bootstrap/cache目录没有写入权限,触发日志写入时就会抛出权限拒绝错误。

修复方案
  • 权限修正操作必须进入容器内部执行:在./vendor/bin/sail up -d命令之后、执行artisan命令之前,新增一行命令,以root身份进入容器修改目录所有者和权限,不需要使用777的高危权限,755即可满足读写要求:
./vendor/bin/sail root-shell -c "chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache && chmod -R 755 /var/www/html/storage /var/www/html/bootstrap/cache"
  • 测试环境可选优化:在.env.pipelines配置文件中添加LOG_CHANNEL=null,关闭测试运行时的文件日志写入,从根源上规避日志写入触发的权限问题,该配置不会影响测试逻辑的正常执行。
  • 如果你自定义过Sail容器的PHP运行用户,将上述chown命令中的sail:sail替换为实际使用的用户:用户组即可,例如使用www-data时替换为www-data:www-data。
修正后的Pipeline脚本参考
script:
  - apt-get update && apt-get install -yqq unzip git
  - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
  - composer install --prefer-dist --no-ansi --no-interaction --no-progress --no-scripts --no-suggest --ignore-platform-req=ext-mongodb
  - cp .env.pipelines .env
  - export DOCKER_COMPOSE_VERSION=1.18.0
  - export DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)
  - curl -L $DOCKER_COMPOSE_URL > docker-compose
  - chmod +x docker-compose
  - mv docker-compose /usr/local/bin
  - rm docker-compose.yml
  - cp docker-compose-bitbucket-pipeline.yml docker-compose.yml
  - ./vendor/bin/sail up -d
  - ./vendor/bin/sail root-shell -c "chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache && chmod -R 755 /var/www/html/storage /var/www/html/bootstrap/cache"
  - ./vendor/bin/sail artisan key:generate

内容的提问来源于stack exchange,提问作者Artem S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:24:26