构建php-apache镜像时docker-php-ext-install及扩展不存在报错
问题原因
- RUN命令语法错误
你原来的RUN语句中,执行完docker-php-ext-enable bcmath后没有加&&连接符,导致后面的docker-php-ext-install calendar被当成了docker-php-ext-enable的模块参数传入,系统自然找不到名为docker-php-ext-install的模块,触发第一个报错。 - 扩展依赖缺失/扩展已被PHP 8.0移除
- gd、calendar这类PHP扩展安装前需要先安装对应的系统依赖库,没有前置依赖直接安装扩展就会提示扩展不存在。
- mcrypt扩展从PHP 7.2开始就已经从官方源码中移除,需要通过PECL安装;wddx、wmlrpc两个扩展在PHP 7.4之后就已经被官方移除,PHP 8.0不支持这两个扩展。
解决方案
直接替换你的./php/Dockerfile为以下内容即可:
FROM php:8.0-apache # 先更新软件源,安装扩展所需的系统依赖 RUN apt-get update && apt-get upgrade -y && \ apt-get install -y \ libpng-dev \ libjpeg-dev \ libfreetype6-dev \ libxml2-dev \ libzip-dev \ && \ # 配置gd扩展的编译参数 docker-php-ext-configure gd --with-freetype --with-jpeg && \ # 批量安装官方自带的可直接安装的扩展,安装完成后会自动启用,不需要单独调用enable docker-php-ext-install \ bcmath \ calendar \ gd \ pdo_mysql \ mysqli \ soap \ sockets \ exif \ zip \ && \ # 安装PECL扩展mcrypt pecl install mcrypt && \ docker-php-ext-enable mcrypt && \ # 清理缓存减少镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
补充说明
- 移除了PHP 8.0不再支持的
wddx、wmlrpc两个扩展,如果你确实需要这两个扩展,只能降级PHP版本到7.3及以下。 - 优化了命令结构,减少镜像层数,同时清理了安装缓存减少镜像体积。
docker-php-ext-install命令安装官方自带扩展完成后会自动启用,不需要单独调用docker-php-ext-enable。- 你的
docker-compose.yml配置没有问题,不需要修改。
内容的提问来源于stack exchange,提问作者datasn.io
相关产品推荐
相关产品推荐

