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一样实现它,但徒劳无功。
如果有人想要实现相同的遵循以下说明
我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)