【问题标题】:AWS Elastic Beanstalk Change Permissions on Mounted DirectoryAWS Elastic Beanstalk 更改挂载目录的权限
【发布时间】: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 所有

【问题讨论】:

    标签: php linux amazon-web-services docker amazon-elastic-beanstalk


    【解决方案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.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-30
        • 2013-04-28
        • 2015-01-20
        • 2016-03-08
        • 2019-07-16
        • 2020-11-10
        • 2020-12-03
        • 2020-11-07
        相关资源
        最近更新 更多