如何在官方 docker php 镜像上以非 root 用户身份运行 composer

Sky*_*Rar 7 php shell composer-php docker

我使用官方的 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
Run Code Online (Sandbox Code Playgroud)

当我使用composer install它安装任何软件包时,它以 root 身份运行,因为主 php 进程以 root 身份运行。那么如何以 root 身份运行主 php 进程,以另一个非 root 用户身份运行 composerdeploy呢?

Update-1 我的 dockerfile 如下所示。所以你可以看到我没有安装内部dockerfile作曲家的包,而我在安装这些包容器一样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"]
Run Code Online (Sandbox Code Playgroud)

我试图像https://unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command一样实现它,但徒劳无功。

Sky*_*Rar 5

如果有人想要实现相同的遵循以下说明

USER在 dockerfile 中添加了一个,以便deploy将来以用户身份运行作曲家。但是 php-fpm 需要以 root 身份运行。所以我在 php-fpm 二进制文件上设置了一个 setuid 位。现在一切都解决了。

RUN chmod u+s /usr/sbin/php-fpm7

USER deploy
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm7","-F"]
Run Code Online (Sandbox Code Playgroud)