Laravel存储符号:链接在本地环境中不工作

Laravel存储符号:链接在本地环境中不工作,laravel,docker,storage,symlink,Laravel,Docker,Storage,Symlink,我使用的是默认的laravel文件夹结构和文件系统public: 'public'=>[ “驱动程序”=>“本地”, 'root'=>存储路径('app/public'), 'url'=>env('APP_url')。/storage', “可见性”=>“公共”, ], 一切都在docker上运行,完整的laravel文件夹被装入/var/www/html: #。。。Laravel PHP-FPM服务定义 卷数: -“/:/var/www/html” #... 当我运行php artisan

我使用的是默认的laravel文件夹结构和文件系统
public

'public'=>[
“驱动程序”=>“本地”,
'root'=>存储路径('app/public'),
'url'=>env('APP_url')。/storage',
“可见性”=>“公共”,
],
一切都在docker上运行,完整的laravel文件夹被装入
/var/www/html

#。。。Laravel PHP-FPM服务定义
卷数:
-“/:/var/www/html”
#...
当我运行
php artisan storage:link
然后运行
cd/var/www/html/public
ls-la
时,我看到符号链接存在:

lrwxr-xr-x 1根根目录32 May 5 11:19 storage->/var/www/html/storage/app/public

如果我随后检查链接文件夹是否也存在于容器
cd/var/www/html/storage/app/public
中,则一切都如预期的那样

另外,当直接选中
ls-la/var/www/html/public/storage/
时,它会显示链接文件夹的内容。因此,一切都是从符号链接的角度进行的

# ls -la /var/www/html/public/storage/
total 512
drwxr-xr-x  4 www-data www-data    128 May  5 11:21 .
drwxr-xr-x 11 www-data www-data    352 Apr 19 14:03 ..
-rw-r--r--  1 www-data www-data     14 Feb 16 16:58 .gitignore
-rw-r--r--  1 www-data www-data 519648 May  5 10:58 sample.png
但是,当打开url
/storage/sample.png
时,服务器返回404

/var/www/html/public
的其余内容工作正常,因此,例如
/var/www/html/public/test.png
localhost/test.png
下可见

但在制作方面,一切都很好。你知道为什么符号链接在本地系统上不起作用,而链接实际上是正确的吗


我已尝试删除存储链接并再次设置符号链接。

在nginx的文件配置中添加以下行:

location ^~ /storage/ {
    root "/var/www/html/public/storage/"
}

每次请求以存储开始时,都将直接访问共享路径。

您提到您正在使用docker。我认为它不能在本地工作,但在生产环境中工作的原因可能是两个部署之间的配置发生了变化

为了让它工作,Nginx容器必须能够访问存储文件夹,因为它应该服务于位于那里的资产。我猜目前情况并非如此,只装载了公用文件夹

检查是否将整个项目或
/public
/storage
安装到Nginx容器中

大概是这样的:

services:
  #...
  nginx:
   #...
   volumes:
    - "./public:/var/www/html/public:ro"
    - "./storage/app:/var/www/html/storage/app:ro"
    #...

确保您的符号链接是从docker容器内部创建的,这一点很重要

如果从容器外部运行storage:link,则符号链接将相对于本地计算机

通过运行以下命令进入容器:

docker exec -it name_of_your_php_container bash

一旦进入,您应该能够运行php artisan

您的本地web服务器是否配置为遵循符号链接?我添加了
禁用符号链接
nginx.conf
http
指令,如果这是您所指的。但仍然不起作用。您使用的是什么操作系统?(如果答案是Windows,恐怕这是您的问题-符号链接映射不正确。如果是这种情况,我将写一个带有可选选项、引用等的答案)MacOS Catalina 10.15.7:)尝试过了,存储链接是相对
存储->../storage/app/public/
创建的,但不幸的是仍然是404。感谢您,您可以相对地设置符号链接来解决此问题:
php artisan storage:link--relative