Laravel Sail启动后访问出现权限拒绝错误,求排查方案
问题原因
这是因为Docker容器内的运行用户(默认是www-data)与宿主机用户的权限不匹配:
- 你在宿主机创建的Laravel项目文件,所属用户是本地Ubuntu用户,而Sail容器里的PHP进程以www-data用户运行,没有对
storage和bootstrap/cache目录的读写权限。 php artisan serve直接用宿主机的PHP进程运行,继承了你本地用户的权限,所以能正常读写这些目录。
解决方案
方案1:宿主机上修复目录权限
在项目根目录执行以下命令,给必要目录设置正确的权限和归属:
# 设置目录读写权限 sudo chmod -R 775 storage bootstrap/cache # 将目录归属设置为当前用户和www-data组(容器内进程属于该组) sudo chown -R $USER:www-data storage bootstrap/cache
方案2:在Sail容器内修复权限
如果宿主机操作后仍未解决,直接进入容器内部修改权限:
# 进入Sail的应用容器 ./vendor/bin/sail exec laravel.test bash # 在容器内执行权限修复 chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache # 退出容器 exit
方案3:修改Sail的Docker配置(持久解决)
如果不想每次创建项目都手动改权限,可以修改项目根目录的docker-compose.yml,让容器内运行用户的UID与宿主机一致:
- 打开
docker-compose.yml,找到laravel.test服务,添加或修改user配置项:
services: laravel.test: # ... 其他原有配置 user: '${UID:-1000}:${GID:-1000}'
- 在项目根目录的
.env文件中添加你的UID和GID(可用id -u和id -g命令查看当前用户的对应值):
UID=1000 GID=1000
- 重启Sail使配置生效:
./vendor/bin/sail down ./vendor/bin/sail up -d
内容的提问来源于stack exchange,提问作者alexciornei22
相关产品推荐
相关产品推荐

