如何使用docker-php-extension-installer安装扩展

时间:2020-09-30 20:19:02

标签: php dockerfile

我是Docker的新手。 我想使用docker-php-extension-installer将PHP扩展安装到我的容器中,因为根据php-docker hub文档,该脚本基于docker-php-ext- *脚本构建,并通过自动简化了PHP扩展的安装。添加和删​​除Debian(apt)和Alpine(apk)软件包。

问题是当我尝试安装gd或pdo_mysql或其他东西时,安装了扩展程序,但是当我在bash中运行php -m命令时,未在模块列表中显示这些扩展程序。

这是我的DockerFile

FROM php:7.3-fpm

# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

RUN apt-get update && apt-get install -y unzip \
    && apt-get install -y git nano \
    && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# use https://github.com/mlocati/docker-php-extension-installer to simply install php extensions with dependencies
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions gd pdo_mysql

也许我必须以某种方式启用这些扩展,但是如何从Dockerfile中实现呢?在docker-php-extension-installer页面文档中也没有说这句话,在官方php docker页面中也没有说。

如果有人知道,请帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

上述Dockerfile用作docker-compose的一部分。创建docker-compose.yml文件时,我犯了一个错误。为了更改默认的php配置,我将主机折叠安装,保留了自定义的php.ini,并将其映射到php容器中的conf.d文件夹。像这样:

import { Injectable } from '@nestjs/common';

import { hello } from './Hello';

@Injectable()
export class AppService {
  getHello(): void {
    console.log(hello);
  }
}

但是conf.d文件夹保留所有已安装扩展的配置,例如:

  # PHP Service
  php:
    build: ./.docker/php
    volumes:
      - ./.docker/php/conf.d:/usr/local/etc/php/conf.d:ro
    depends_on:
      - mysql

因此,我的主机文件夹中的内容替换了原始的conf.d内容,结果-扩展名无效。