Docker部署Laravel时遭遇日志目录权限拒绝问题
Laravel Docker镜像构建日志目录权限拒绝问题
报错信息
The stream or file "/var/www/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied
我的配置文件
docker-compose.yml
php: build: context: . dockerfile: Dockerfile container_name: php volumes: - ./:/var/www/ - laravel-log:/var/www/html/storage/ - bootstrap-cache:/var/www/html/bootstrap/cache/ ports: - "9000:9000" networks: - laravel
Dockerfile
FROM php:8-fpm COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer RUN docker-php-ext-install pdo pdo_mysql RUN mkdir -p /var/www/storage/framework/{sessions,views,cache} \ && mkdir -p /var/www/bootstrap/cache \ && mkdir -p /var/www/storage/logs \ && chmod +w /var/www/storage/ \ && chown -R www-data:www-data /var/www
问题分析与解决办法
核心问题
Dockerfile中对/var/www/storage设置了权限,但docker-compose里把卷挂载到了/var/www/html/storage,路径不匹配导致权限配置完全没生效。容器启动后,挂载的卷目录默认属于root用户,而PHP-FPM以www-data用户运行,自然无法写入日志文件。
具体修复步骤
统一路径匹配
修改docker-compose.yml中的卷挂载路径,和Dockerfile保持一致:volumes: - ./:/var/www/ - laravel-log:/var/www/storage/ - bootstrap-cache:/var/www/bootstrap/cache/强化权限设置
更新Dockerfile中的权限命令,确保目录拥有正确的读写权限:RUN mkdir -p /var/www/storage/framework/{sessions,views,cache} \ && mkdir -p /var/www/bootstrap/cache \ && mkdir -p /var/www/storage/logs \ && chmod -R 775 /var/www/storage/ /var/www/bootstrap/cache \ && chown -R www-data:www-data /var/www/storage/ /var/www/bootstrap/cache修复现有卷权限(可选)
如果已经创建过卷,直接进入容器执行权限修复命令:docker exec -it php chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache重建容器(彻底解决)
删除现有卷并重新构建容器:docker-compose down -v docker-compose up --build
内容的提问来源于stack exchange,提问作者Gabriel Teixeira
相关产品推荐
相关产品推荐

