AWS Elastic Beanstalk更改已安装目录的权限

时间:2017-11-21 18:51:52

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

我将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拥有

2 个答案:

答案 0 :(得分:2)

如上所述here,您可以在安装前chown目录。简要概述:

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

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

使用填写了ID的生成的Dockerfile来构建图像。

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

答案 1 :(得分:0)

您只需要将您的源文件复制到容器中,然后对它们进行整理即可。

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

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

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