AWS Elastic Beanstalk更改已加载目录的权限

我正在将一个Laravel应用程序部署到一个多容器Elastic Beanstalkconfiguration。 应用程序代码打包在一个zip文件中,并作为部署的一部分进行上传,然后将其安装到PHP-FPM Docker容器中。 容器运行正常并且代码被挂载,但是所有挂载的目录都由root拥有,因此应用程序不能写入这些目录(日志文件,框架文件等所需的)。 我需要他们由www-data拥有

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

因此,我需要find一种方法来改变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 

部署是成功的,所以我可以假定命令成功执行,但不幸的是似乎没有改变权限,因为login到容器,目录仍然由根

chown ,您可以在安装之前将目录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来构build图像。

如果你不控制Dockerfile,下面是一个容器模式,用于在运行时以易于移植的方式分配userid / groupid。