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

时间:2017-09-07 19:24:27

标签: linux bash docker dockerfile ami

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

我希望所有用户能够对此文件夹下的所有文件执行读取,写入和执行操作。那么实现它的最佳方法或Linux命令是什么?

我正在做的是我将两个独立的容器分开,一个用于Nginx服务器,一个用于PHP:FPM应用服务器用于托管Laravel 5.4 app。

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

  

流或文件" /var/www/storage/logs/laravel.log"不可能   打开:无法打开流:权限被拒绝

所以我在我的docker文件中添加了RUN chmod -R 777 storage。 但是它没有解决问题。

所以我也尝试使用SGID通过在我的dockerfile中添加一行RUN chmod -R ug+rwxs storage来修复此问题。仍然没有解决许可问题。

另外,有趣的是,在我的MAC Docker容器上,这没有任何问题(我的意思是没有将chmod -R 777添加到文件夹或使用SGID来设置我的docker文件中的文件夹的权限)。但是,当在Linux AMI EC2实例(Amazon AMI Linux EC2)上运行相同的代码时......权限问题就开始发生了。

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

2 个答案:

答案 0 :(得分:0)

解决方案是使用由同一uid标识的同一用户启动两个容器。例如,您可以在运行容器时选择root或任何uid:

docker run --user root ...

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

USER root

答案 1 :(得分:0)

我通过找出当有人访问应用程序网址时创建缓存文件的用户名来解决它。然后更新我的dockerfile以包含所有源代码所在的app文件夹根目录下该用户的SGID所有权声明(因此以后以某种方式包含的所有子文件夹和文件...在某些时候运行时...可以从该用户的Web容器),然后对需要chmod 777权限的特定文件夹使用chmod 777权限。