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 更改挂载目录的权限