我使用官方的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那样实现目标,但徒劳无功。
答案 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"]