这个错误表明 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 项目应该可以正常写入日志文件,而不会出现权限问题。