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