如何为给定的Linux文件夹内的所有文件提供默认权限

我需要使在特定的Linux目录中创build的任何文件具有777权限。

我想让所有的用户能够在这个文件夹下的所有文件上进行读,写和执行。 那么什么是最好的方法或Linux命令来实现呢?

我正在做的是,我旋转了两个单独的容器,一个用于Nginx服务器,另一个用于PHP:FPM应用服务器,以托pipeLaravel 5.4应用程序。

请考虑以下情况。 我有一个Docker应用程序容器A(PHP:FPM),用于将Web应用程序文件提供给Docker容器B(Nginx)。 现在,当我访问网站时,我通过networking容器提供网页。 这两个容器都在同一个networking中,我将我的应用程序容器中的卷共享到我的Web容器。 但是,当Web容器试图读取应用程序容器上的文件时,我得到如下所示的错误:

stream或文件“/var/www/storage/logs/laravel.log”无法打开:无法打开stream:权限被拒绝

所以我在我的docker文件中添加了RUN chmod -R 777 storage 。 但是这不是解决问题的方法。

所以我也尝试使用SGID来解决这个问题,在我的dockerfile中添加一行作为RUN chmod -R ug+rwxs storage 。 仍然没有解决许可的问题。

在一个单独的笔记,有趣的是,在我的MAC泊坞窗容器这工作没有任何问题(我的意思是没有添加chmod -R 777到文件夹或使用SGID设置许可到我的泊坞窗文件中的文件夹)。 但是,如果在Linux AMI EC2实例(Amazon AMI Linux EC2)上运行相同的代码,则会发生权限问题。

那么我该如何解决这个问题呢?

解决方法是使用同一用户标识的相同用户启动两个容器。 例如,你可以在运行容器时selectroot或者任何uid:

 docker run --user root ... 

或者,您可以在启动之前,在Dockerfile内通过在CMD或入口点之前添加以下内容切换到另一个用户

 USER root 

我已经通过计算用户名解决了这个问题,当有人访问应用程序url时,创build哪个caching文件。 然后更新我的dockerfile,以包括该用户的所有源代码所在的应用程序文件夹的根目录的SGID所有权的声明(所以所有的子文件夹和文件包括后来以任何方式…在运行时有时…可以从该用户的Web容器),然后在需要具有chmod 777权限的特定文件夹上使用chmod 777权限。