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

时间:2018-10-18 03:46:23

标签: php shell docker composer-php

我使用官方的php:alpine https://github.com/docker-library/php/blob/master/7.2/alpine3.7/fpm/Dockerfile作为我的基本映像。我的项目基本上是基于作曲家的项目。所以我像下面这样在上面安装了作曲家。

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软件包,而是将它们安装在容器上,例如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 个答案:

答案 0 :(得分:1)

如果有人想要实现与我想做的相同的事情,如下所示。

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

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

USER deploy
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm7","-F"]