docker 部署 Laravel,无法访问 storage 目录中的 文件

环境#

基于 docker 构建了 PHP7.2 容器、nginx 容器,在容器中部署了 laravel 应用

问题#

图片资源都存储到 laravel 应用的 storage/app/public 目录下,同时在 PHP 容器的 laravel 应用根目录下执行了 php artisan storage:link 命令,然后访问文件 http://域名/storage/a.pdf 失败。

是不是因为在 容器里面执行 php artisan storage:link 的原因

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

因为你使用命令行的账号跟网页访问的账号不一样,比如命令行用 root 账号执行,创建的文件拥有者是 root,而一般网页访问,是用 www-data 账号来写入文件,此时要写入一个拥有者为 root 的文件,很可能就没有写的权限。可以参考这篇:https://stackoverflow.com/questions/276745... , 有几种解决方案。觉得这种比较省事:

setfacl -d -m u:www-data:rw ~/dnmp/project/weibo/storage/logs

在宿主机运行,给 www-data 默认 rw 的权限,后面是你要授权的目录。(如果没有安装 acl,需要安装:apt-get insatall acl)

5年前 评论