You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laradock执行docker compose up时Tokenizer编译错误求助

Laradock构建PHP镜像时tokenizer扩展编译失败解决方法

错误信息

153.2 creating libtool
153.3 appending configuration tag "CXX" to libtool
153.4 configure: patching config.h.in
153.4 configure: creating ./config.status
153.4 config.status: creating config.h
153.5 make: *** No rule to make target '/usr/src/php/ext/tokenizer/Zend/zend_language_parser.y', needed by '/usr/src/php/ext/tokenizer/Zend/zend_language_parser.c'.  Stop.
------
failed to solve: process "/bin/sh -c pecl channel-update pecl.php.net;   docker-php-ext-install mysqli mbstring pdo pdo_mysql xml pcntl;   if [ $(php -r \"echo PHP_MAJOR_VERSION;\") = \"8\" ] && [ $(php -r \"echo PHP_MINOR_VERSION;\") = \"1\" ]; then     php -m | grep -q 'tokenizer';   else     docker-php-ext-install tokenizer;   fi" did not complete successfully: exit code: 2

问题原因

PHP 8.2及以上版本中,tokenizer扩展已成为内置扩展,无需通过docker-php-ext-install手动安装。但Laradock原有脚本仅跳过了PHP 8.1版本的tokenizer安装,在PHP 8.2+版本仍尝试执行安装命令,导致编译时找不到对应源码文件(路径结构已变化)。

解决步骤

  1. 打开Laradock目录下的PHP Dockerfile,路径一般为laradock/php/Dockerfile
  2. 找到安装扩展的命令块,替换原有的tokenizer判断逻辑:

原代码:

if [ $(php -r \"echo PHP_MAJOR_VERSION;\") = \"8\" ] && [ $(php -r \"echo PHP_MINOR_VERSION;\") = \"1\" ]; then
    php -m | grep -q 'tokenizer';
else
    docker-php-ext-install tokenizer;
fi

替换为:

# PHP 8.2及以上版本tokenizer为内置扩展,无需手动安装
PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;")
if [ $(echo "$PHP_VERSION < 8.2" | bc) -eq 1 ]; then
    docker-php-ext-install tokenizer;
else
    php -m | grep -q 'tokenizer';
fi
  1. 清理Docker构建缓存,避免旧缓存影响:
docker builder prune -af
  1. 重新启动Laradock容器:
docker-compose up -d

内容的提问来源于stack exchange,提问作者DolDurma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:22:20