如何在OSX上更改docker安装卷的权限,以使用运行Laravel 5.1的Nginx web服务器


How to change permissions of a docker mounted volume on OSX to work with Nginx web server running Laravel 5.1?

我使用运行Laravel 5.1的Docker生成PDF,所以我的问题是文件成功生成,没有错误,并保存到已安装的卷中。当我试图使用Storage::disk('local')->get($filename);将文件拉回来显示时,问题就出现了。我得到了

ErrorException in Local.php line 187:
file_put_contents(/app/storage/app/savedfile.pdf): failed to open stream: Permission denied.

我还尝试从docker容器内部更改权限,也尝试手动更改已安装卷的权限,但没有帮助。

这是我用来保存文件的代码

    $snappy = new Pdf('wkhtmltopdf');
    $tmpFile = storage_path().'/app/savedfile.pdf';
    $snappy->setOption('images', true);
    $snappy->setOption('footer-right', '[page] OF [topage]');
    $result = $snappy->generateFromHtml(
        $view->render(),
        $tmpFile
    );
    Storage::disk('local')->put('report.pdf',  'File::get($tmpFile));

有人知道我该怎么解决吗?

Docker用户与主机用户不同。您需要确保访问装载卷的主机用户和容器用户都可以访问卷的文件。

您可以通过几种方式实现这一点,例如:

  1. 使文件在世界范围内可读/写
  2. 确保主机和容器的用户ID相同
  3. 写入文件后更改文件的权限

更改后,您应该能够阅读/编写pdf文件。

我花了一段时间试图解决这个问题,但当mac的docker发布时,我很快就转到了它,从那以后我就没有权限问题了。

所以我建议您签出Docker For Mac