我是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页面中也没有说。
如果有人知道,请帮助。谢谢。
答案 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内容,结果-扩展名无效。