Docker环境下安装Imagick遇问题:PHP页面空白及相关报错
搞定php5.6-apache容器的Imagick报错与空白页面问题
嘿,我来帮你一步步拆解这个问题——日志里的几个报错和空白页面其实都和Imagick的安装配置脱不了干系,咱们逐个解决:
1. 先搞定 sh: 1: compgen: not found 报错
这个坑我之前也踩过:php5.6-apache的官方镜像默认用的是dash shell,而compgen是bash专属的内置命令,脚本里调用它自然会找不到。给你两个解决方向:
- 直接把容器默认shell换成bash:在Dockerfile里加一行
RUN ln -sf /bin/bash /bin/sh,这样后续所有脚本都会用bash执行,就不会再报这个错了。 - 如果是你自己写的脚本里用到了compgen,那改改脚本逻辑就行——比如用
ls或者find替代,适配dash的环境。
2. 解决 convert: No such file or directory 报错
convert是ImageMagick的核心命令行工具,Imagick扩展必须依赖它才能正常工作。你肯定是在Dockerfile里只装了Imagick扩展,没装底层的ImageMagick工具包!赶紧在Dockerfile里加这段安装命令:
RUN apt-get update && apt-get install -y --no-install-recommends imagemagick && rm -rf /var/lib/apt/lists/*
装完之后,/usr/bin/convert就会存在,这两个ls报错就会消失。
3. 揪出空白页面的真凶
PHP页面突然空白,90%的概率是致命错误被PHP屏蔽了,先把错误显示打开,才能看到真正的问题:
- 先进入容器:
docker exec -it mycontainer bash - 找到php.ini文件(一般在
/etc/php/5.6/apache2/php.ini),修改这两个配置:display_errors = Onerror_reporting = E_ALL
- 重启apache生效:
service apache2 restart
现在刷新空白页面,就能看到具体的错误提示了。
结合你的Imagick背景,大概率是扩展没装对:
- 先检查扩展是否存在:在容器里执行
php -m | grep imagick,如果没输出,说明扩展没装好——注意php5.6只能装Imagick 3.4.4版本(更高版本不兼容php5.6),得重新编译安装对应版本。 - 如果扩展已经在列表里,那检查php.ini里有没有加
extension=imagick.so,并且路径要正确。
最后验证一下
- 如果改了Dockerfile,重新构建镜像:
docker build -t my-php56-apache . - 重启容器:
docker run -d --name mycontainer my-php56-apache - 再看日志:
docker logs -f mycontainer,确认之前的报错都没了。 - 访问页面,应该就能正常显示了。
内容的提问来源于stack exchange,提问作者Jay Shri
相关产品推荐
相关产品推荐

