【问题标题】:Docker - How to disable PHP ext / modulesDocker - 如何禁用 PHP ext / 模块
【发布时间】:2016-07-19 11:39:03
【问题描述】:

我正在开发一个 PHP API,我想在我的 PHP-FPM 图像中禁用未使用的 php 模块,例如“sqlite3, pdo ..”。

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

【问题讨论】:

  • php.ini 文件怎么样?
  • 我在 /usr/local/etc/php 下有一个自定义的 php.ini 文件。你有什么建议?我在上面的链接上找不到任何有用的东西.. php 带有一些默认模块,我想禁用其中的一些。

标签: php docker php-extension


【解决方案1】:

终于找到重点了。

在 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查看,相关的扩展已经消失了。

【讨论】:

  • mkdir disalbled 有错别字,无法更改,因为编辑需要至少 10 个已编辑字符。
  • 我正在使用 php:7.2.5-fpm 并且想禁用默认情况下随图像一起提供的 pdo_sqlite。该怎么做?
【解决方案2】:

捎带阿尔弗雷德的答案,但我今天做了这些。

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。

【讨论】:

    【解决方案3】:

    是的,这是可能的。

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

    例如,如果你想拥有一个带有iconvmcryptgd扩展名的PHP-FPM镜像,你可以继承你喜欢的基础镜像,像这样编写你自己的Dockerfile:

    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
    

    请记住,您必须手动为您的扩展安装依赖项。如果扩展需要自定义 configure 参数,您可以像这个示例一样使用 docker-php-ext-configure 脚​​本。

    【讨论】:

    • 那么在我们已经安装之后如何禁用或卸载呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2020-05-09
    • 2020-11-02
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多