如何在官方 docker php 映像上以非 root 用户身份运行 composer
Posted
技术标签:
【中文标题】如何在官方 docker php 映像上以非 root 用户身份运行 composer【英文标题】:How to run composer as non root user on official docker php image 【发布时间】:2019-03-22 19:58:00 【问题描述】:我使用官方的 php:alpine https://github.com/docker-library/php/blob/master/7.2/alpine3.7/fpm/Dockerfile 作为我的基础镜像。我的项目基本上是基于作曲家的项目。所以我在上面安装了composer,如下所示。
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer
当我使用composer install
安装任何软件包时,它以root 身份运行,因为主php 进程以root 身份运行。那么如何以 root 身份运行主 php 进程并以另一个非 root 用户 deploy
身份运行 composer?
更新 1
我的 dockerfile 如下所示。如您所见,我没有在 dockerfile 中安装 composer 包,而是将这些包安装在 container 上,例如 docker exec -it php composer install
。
FROM php:7.2-fpm-alpine
..........................
..........................
..........................
RUN set ex \
# Install Composer( Requires git )
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer \
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
我试图像https://unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command 一样实现它,但徒劳无功。
【问题讨论】:
【参考方案1】:如果有人想要达到同样的效果,请遵循以下说明
我在 dockerfile 中添加了一个USER
,以便将来作曲家将作为用户deploy
运行。但是 php-fpm 需要以 root 身份运行。所以我在 php-fpm 二进制文件上设置了一个 setuid 位。现在一切都解决了。
RUN chmod u+s /usr/sbin/php-fpm7
USER deploy
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm7","-F"]
【讨论】:
注意 php-fpm 以 php-fpm.conf 中定义的用户身份运行,如果你以 root 身份运行它,如果你像这里一样以另一个用户身份运行它,它将不是 root。以上是关于如何在官方 docker php 映像上以非 root 用户身份运行 composer的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Debian 上以非 root 用户身份运行 Spring Boot 应用程序?
如何使用官方 PHP Docker 镜像方法安装 php-redis 扩展?
如何利用virtualenv工具在JupyterHub上以非root权限创建基于Python3.6.6的虚拟环境?
仅当函数的返回值等于“Value”时,gdb 是不是可以在函数上以非交互方式有条件地中断?