AWS Elastic Beanstalk 更改挂载目录的权限

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 更改挂载目录的权限【英文标题】:AWS Elastic Beanstalk Change Permissions on Mounted Directory 【发布时间】:2018-05-05 08:35:10 【问题描述】:

我正在将 Laravel 应用程序部署到多容器 Elastic Beanstalk 配置中。应用程序代码打包在一个 zip 文件中并作为部署的一部分上传,然后安装到 php-FPM Docker 容器中。容器正确运行并且代码已挂载,但是所有已挂载的目录都归root 所有,因此应用程序无法写入这些目录(日志文件、框架文件等需要)。我需要它们归www-data 拥有

如果我在 EC2 实例上手动 SSH,然后运行 ​​docker exec -it container_id bash 并运行 ls -la 我可以看到所有文件/目录都归 root 所有。如果我运行chown -R www-data: storage vendor,那么应用程序将按预期工作。

因此我需要找到一种方法来更改 php-fpm 容器内部已挂载目录的权限。

我在.ebextensions/permissions.config中尝试了以下命令

container_commands:
  01_change_storage_permissions:
    # Get the php fpm container ID and change permissions on the mounted directories
    command: sudo docker exec $(sudo docker ps -aqf "name=php-fpm") chown -R www-data:www-data storage vendor bootstrap

部署成功,因此我可以假设命令已成功执行,但不幸的是它似乎没有更改权限,因为登录到容器时,目录仍归 root 所有

【问题讨论】:

【参考方案1】:

您只需将源文件复制到容器中,然后 chown 即可。

ADD ./ /var/www
RUN chown....

生产时最好将文件复制到容器中。

在这里阅读:https://medium.com/@basi/docker-compose-from-development-to-production-88000124a57c

【讨论】:

【参考方案2】:

您可以在挂载目录之前chown,如here 所述。简要概述:

如果您控制 Dockerfile,则运行 HOST_UID=$(id -u)HOST_GID=$(id -g) 并在以下两个命令中生成扩展 $HOST_GID$HOST_UID 的 Dockerfile:

RUN groupadd -g $HOST_GID mygroup
RUN useradd -l -u $HOST_UID -g mygroup myuser

使用生成的 Dockerfile 并填写 ID,构建您的映像。

如果你不控制 Dockerfile,here’s a container pattern for assigning the userid / groupid at runtime in a way that’s easily portable.

【讨论】:

以上是关于AWS Elastic Beanstalk 更改挂载目录的权限的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 中更改 AWS RDS 层级

如何在 AWS elastic-beanstalk 中更改我的 python 版本

AWS Elastic beanstalk - 更改解决方案堆栈名称

AWS Elastic Beanstalk 更改挂载目录的权限

仅在 AWS Elastic Beanstalk 网站上部署更改的文件

在 AWS Elastic Beanstalk 中,如何更改 php.ini 的参数