Docker - 如何禁用 PHP 分机/模块

Docker - How to disable PHP ext / modules

我正在开发 PHP API,我想 禁用我的 中未使用的 php 模块 PHP-FPM图片,如"sqlite3, pdo ..".

我是一个 docker 初学者,我想知道是否有类似 docker-php-ext-enable 的东西,如果没有,禁用未使用的 php 模块的最佳做法是什么。

是的,这是可能的。

取自https://hub.docker.com/_/php/

For example, if you want to have a PHP-FPM image with iconv, mcrypt and gd extensions, you can inherit the base image that you like, and write your own Dockerfile like this:

FROM php:7.0-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
       libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

Remember, you must install dependencies for your extensions manually. If an extension needs custom configure arguments, you can use the docker-php-ext-configure script like this example.

终于找到重点了

在docker php 容器中,所有已注册的模块都保存在以下路径下的配置文件中。

/usr/local/etc/php/conf.d/*.ini

bash进入容器:

docker exec -it php_container_name bash

您可以通过php -m:

列出所有启用的模块

cd进入那个文件夹,你可以看到相关的配置文件:

cd /usr/local/etc/php/conf.d/
ls

# output
docker-php-ext-mcrypt.ini  docker-php-ext-mysqli.ini    
docker-php-ext-opcache.ini  opcache-recommended.ini  
docker-php-ext-zip.ini

要禁用某些扩展模块,请创建目录 disabled,然后将 .ini 文件移入其中,例如:

mkdir disabled
mv docker-php-ext-opcache.ini disabled
mv opcache-recommended.ini

最后,按Ctrl+D退出容器,然后重启容器使更改生效。

docker restart php_container_name

你可以进入容器运行php -m看看,相关的扩展没有了

借用阿尔弗雷德的回答,但我今天做了这些。

alias disDebugCust="docker exec -it xdebugContainer bash -c 'cd /usr/local/etc/php/conf.d/ && mkdir -p disabled && mv xdebug.ini disabled && /etc/init.d/apache2 reload'"
alias enDebugCust="docker exec -it xdebugContainer bash -c 'cd /usr/local/etc/php/conf.d/disabled && mv xdebug.ini /usr/local/etc/php/conf.d/ && /etc/init.d/apache2 reload'"

首先我们执行到容器中。 然后我们进入配置文件夹。 然后,如果不存在,我们创建一个名为 disabled 的新目录。 然后我们移动ini文件。 最后我们重启apache。

第二个命令只是将其移回并重新启动 apache。