Ubuntu系统PHP 8.2已启用bcmath扩展,但Drupal 10 Commerce仍报错
问题
我在Ubuntu系统中已为PHP 8.2启用bcmath扩展,但Drupal 10的Commerce模块仍提示错误。
本地验证信息
$ php -i | grep -i bcmath PHP Warning: Module "gd" is already loaded in Unknown on line 0 /etc/php/8.2/cli/conf.d/20-bcmath.ini, bcmath BCMath support => enabled bcmath.scale => 1 => 1
当前Docker Compose配置
version: '3.8' services: mysql: image: mysql:8.0.33 environment: - MYSQL_ROOT_PASSWORD=root volumes: - mysql_data:/var/lib/mysql restart: always drupal: image: drupal:10 ports: - 8080:80 volumes: - ./web:/var/www/html - ./vendor:/opt/drupal/vendor - ./composer.json:/opt/drupal/composer.json - ./composer.lock:/opt/drupal/composer.lock links: - mysql environment: - MYSQL_USERNAME=root - MYSQL_PASSWORD=root restart: always volumes: mysql_data:
回答
你本地Ubuntu的PHP CLI确实启用了bcmath,但Docker容器里的Drupal运行在独立的PHP环境中,和本地PHP完全隔离,官方drupal:10镜像默认没有预装bcmath扩展,这就是Commerce模块报错的核心原因。
持久化解决方法(推荐)
- 在项目根目录创建
Dockerfile,内容如下:
FROM drupal:10 # 安装bcmath扩展 RUN docker-php-ext-install bcmath
- 修改
docker-compose.yml中的drupal服务,将image: drupal:10替换为build: .,让Compose使用自定义镜像构建:
drupal: build: . # 替换原image字段 ports: - 8080:80 volumes: - ./web:/var/www/html - ./vendor:/opt/drupal/vendor - ./composer.json:/opt/drupal/composer.json - ./composer.lock:/opt/drupal/composer.lock links: - mysql environment: - MYSQL_USERNAME=root - MYSQL_PASSWORD=root restart: always
- 重新构建并启动容器:
docker-compose down docker-compose up --build -d
- 验证容器内PHP是否已启用bcmath:
# 先通过docker ps查看drupal容器名称,替换下面的[容器名] docker exec -it [容器名] php -i | grep -i bcmath
临时测试方案(重启容器后失效)
如果只是临时验证,可以直接进入容器安装扩展:
# 进入容器 docker exec -it [容器名] bash # 安装依赖并编译bcmath apt-get update && apt-get install -y libbcmath-dev docker-php-ext-install bcmath # 重启Apache生效 apache2ctl restart
内容的提问来源于stack exchange,提问作者Anuraag Moharana
相关产品推荐
相关产品推荐

