Php-fpm 可以处理 cli 脚本吗?官方dockerphp内部发生了什么?

Does Php-fpm can process a cli script? What is happening inside official docker php?

我正在为我的 php 网站使用官方 Docker Php-fpm (https://github.com/docker-library/php/blob/master/7.2/alpine3.8/fpm/Dockerfile) 和官方 Nginx 图像。我已将 Nginx 配置为通过端口 9000 与 php-fpm 通信。docker 的入口点如下所示。

#!/bin/sh
set -e

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "" ]; then
    set -- php-fpm "$@"
fi

exec "$@"

你可以看到当我们尝试执行像docker exec -it container whoami这样的命令时,它以php-fpm为前缀。

所以我的问题是当我传递 PHP cli 脚本时,例如 docker exec -it container composer install 它是如何解释的? composer install 是由 php-fpm 还是 php-cli (/usr/local/bin/php) 处理的?

据我所知,composer 是一个 cli 脚本,我像下面这样安装它应该由 php-cli 处理。

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer

exec "$@" 只执行Dockerfile/Docker-compose 文件中定义为CMD 的命令,仅在最初创建容器时执行一次。一旦容器启动并且您想要 运行 任何命令,那么来自 docker exec 的命令不会覆盖该 CMD["php-fpm"]

此外,作曲家脚本使用 php-cli 而不是 php-fpm。 https://github.com/dbjpanda/composer/blob/70557f3ab7b84a896179396509611fae66b19773/bin/composer#L4