这个错误表明 Laravel 无法将日志写入 /var/www/html/storage/logs/laravel.log
,可能确实是由于 Docker 容器内的文件权限问题导致的。要解决这个问题,请遵循以下步骤:
- 更新
Dockerfile-php-fpm
文件以确保设置了适当的文件权限:
FROM php:8.0-fpm
RUN apt-get update && apt-get install -y \
zlib1g-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip
# 添加下面这行命令
RUN usermod -u 1000 www-data
RUN docker-php-ext-configure gd \
--with-freetype=/usr/include/ \
--with-jpeg=/usr/include/
RUN docker-php-ext-install pdo_mysql gd
WORKDIR /var/www/html
在这里,我们使用 usermod
命令修改了 www-data
用户的 UID 为 1000(这通常是宿主机上第一个非 root 用户的 UID)。这样可以确保 www-data
用户具有访问宿主机上挂载目录的权限。
- 更新
docker-compose.yml
文件中的 PHP 服务部分,确保宿主机上的文件和目录与容器内的用户 ID 相匹配:
php:
build:
context: .
dockerfile: Dockerfile-php-fpm
container_name: my_laravel
working_dir: /var/www/html
user: "1000:1000" # 添加这一行,确保容器内以正确的用户和组运行
volumes:
- ./laravel:/var/www/html
depends_on:
- composer
- 在宿主机上,更改 Laravel 项目的
storage
和bootstrap/cache
目录的权限,以便容器内的用户可以访问和写入这些目录:
sudo chown -R 1000:1000 ./laravel/storage
sudo chown -R 1000:1000 ./laravel/bootstrap/cache
- 使用
docker-compose down
停止并删除现有容器,然后使用docker-compose up --build
重建并启动新容器。
完成上述步骤后,您的 Laravel 项目应该可以正常写入日志文件,而不会出现权限问题。