如何在官方 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 是不是可以在函数上以非交互方式有条件地中断?

如何从 Alpine Docker 映像安装 php8.0-ssh2

如何在 Docker 容器中以非 root 用户身份启动 cron?