环境
Debian:trixie-slim
PHP版本:8.3
问题
在之前PHP8.2的Dockerfile基础上编译PHP8.3版本的Docker镜像报错如下:
PHP Warning: PHP Startup: Unable to load dynamic library 'intl' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl.so (libicuio.so.76: cannot open shared object file: No such file or directory)) in Unknown on line 0
看错误是PHP无法加载intl
扩展,原因是缺少底层依赖库 libicuio.so.76intl
扩展依赖ICU库:PHP 的intl
(Internationalization) 扩展需要系统安装 ICU (International Components for Unicode) 库才能正常工作
在dockerfile中已经安装了libicu-dev
,之前的PHP8.2的dockerfile也是同样的步骤没有出现问题。在编译阶段没有报错,可以正常编译出镜像。但是运行镜像的时候就会报上面的错误。
解决
在已经编译好镜像里查找libicu库文件
root@a452ab2db315:/var/webroot# ls -la /usr/lib/x86_64-linux-gnu/libicu*.so*
ls: cannot access '/usr/lib/x86_64-linux-gnu/libicu*.so*': No such file or directory
可以看到系统中根本没有安装 ICU (International Components for Unicode) 的共享库文件
在系统中搜索可用的libicu
包
# 更新包列表
apt-get update
# 搜索可用的 libicu 包
apt-cache search ^libicu
root@a452ab2db315:/var/webroot# apt-cache search ^libicu
libicu-dev - Development files for International Components for Unicode
libicu76 - International Components for Unicode
libicu4j-java - Library for Unicode support and internationalization
libicu4j-4.4-java - Library for Unicode support and internationalization
可以看到系统返回的libicu库文件为libicu76,在dockerfile中增加libicu76的安装
验证
root@a452ab2db315:/var/webroot# ls -la /usr/lib/x86_64-linux-gnu/libicu*.so*
lrwxrwxrwx 1 root root 18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicudata.so.76 -> libicudata.so.76.1
-rw-r--r-- 1 root root 31864368 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicudata.so.76.1
lrwxrwxrwx 1 root root 18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicui18n.so.76 -> libicui18n.so.76.1
-rw-r--r-- 1 root root 3774800 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicui18n.so.76.1
lrwxrwxrwx 1 root root 16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuio.so.76 -> libicuio.so.76.1
-rw-r--r-- 1 root root 59400 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuio.so.76.1
lrwxrwxrwx 1 root root 18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutest.so.76 -> libicutest.so.76.1
-rw-r--r-- 1 root root 81248 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutest.so.76.1
lrwxrwxrwx 1 root root 16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutu.so.76 -> libicutu.so.76.1
-rw-r--r-- 1 root root 228112 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutu.so.76.1
lrwxrwxrwx 1 root root 16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuuc.so.76 -> libicuuc.so.76.1
-rw-r--r-- 1 root root 2230288 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuuc.so.76.1
# php -m | grep intl
intl
Comments | NOTHING