【问题标题】:How to provide 777 default permission on all files within a given Linux folder如何为给定 Linux 文件夹中的所有文件提供 777 默认权限
【发布时间】:2017-09-07 19:24:27
【问题描述】:

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

我希望所有用户都能够对该文件夹下的所有文件进行读取、写入和执行。那么实现它的最佳方式或 Linux 命令是什么?

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

请考虑以下情况。我有一个 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) 上运行相同的代码时……权限问题开始出现。

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

【问题讨论】:

标签: linux bash docker dockerfile amazon-ami


【解决方案1】:

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

docker run --user root ...

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

USER root

【讨论】:

  • yamenk:好的。但是如何在 docker 文件中添加它呢?我有两个单独的 docker 文件 - 一个用于应用程序,另一个用于 Web。如何在 dockerfile 中添加这条指令?
  • 我在我的 app.docker 文件和 web.dockerfile 的 FROM 语句之后添加了这个。但这并没有解决问题:(!
  • @Andy 如果你执行到容器中,docker exec -it <container-name> bash 用户正在显示什么?
  • 我正在使用 docker compose。所以我做 docker-compose exec bash -C。它让我在应用程序和 Web 容器中都以 root 用户身份登录。
【解决方案2】:

我已经通过找出当有人访问应用程序 url 时创建缓存文件的用户名来解决这个问题。然后更新我的 dockerfile 以在所有源代码所在的应用程序文件夹的根目录上包含该用户的 SGID 所有权声明(因此以后以任何方式包含的所有子文件夹和文件......在运行时的某个时间......可以从该用户的 web 容器),然后对需要具有 chmod 777 权限的特定文件夹使用 chmod 777 权限。

【讨论】:

    猜你喜欢
    • 2020-04-09
    • 2019-10-25
    • 2010-09-18
    • 2017-03-12
    • 1970-01-01
    • 2012-12-20
    • 2015-05-11
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多