Docker Alpine - 启用GD JPEG支持

22

我在使用PHP-FPM的Alpine镜像时,无法获取GD Jpeg支持。我尝试了所有我能想到的组合来使其正常工作。以下是我的Dockerfile中的程序片段:

FROM php:7.1-fpm-alpine

RUN apk update \
    && apk upgrade \
    && apk add --no-cache \
        freetype \
        libpng \
        libjpeg-turbo \
        freetype-dev \
        libpng-dev \
        jpeg-dev \
        libjpeg \
        libjpeg-turbo-dev \

RUN docker-php-ext-configure gd \
        --with-freetype-dir=/usr/lib/ \
        --with-png-dir=/usr/lib/ \
        --with-jpeg-dir=/usr/lib/ \
        --with-gd

RUN NUMPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) \
    && docker-php-ext-install -j${NUMPROC} gd

当我连接到容器并运行php -r 'print_r(gd_info());'时,我得到以下结果:

Array
(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 
    [XBM Support] => 1
    [WebP Support] => 
    [JIS-mapped Japanese Font Support] => 
)

[JPEG支持]的值为空。我已经尝试用以下内容替换/usr/lib/

  • /usr/
  • /usr/include/

但没有成功。问题在于,当我尝试通过Composer安装Magento 2时,会出现以下错误:

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'imagecreatefromjpeg' not found or invalid function name in /var/www/html/vendor/magento/framework/Image/Adapter/Gd2.php on line 65'.

有人经历过这种情况吗?如果是,你们是如何解决的呢?

谢谢


3
这是否只是在libjpeg-turbo-dev后面加上一个\这么简单?如果没有这个反斜杠,在相同的Dockerfile中,我看起来仍然支持JPEG。 - Andy Shinn
我认为可能是同样的错别字导致扩展程序未能正确安装,我也遇到了相同的问题。 - Renrhaf
1个回答

23

你能尝试在第一个RUN命令中删除最后一个斜杠并检查吗?

FROM php:7.1-fpm-alpine

RUN apk update \
    && apk upgrade \
    && apk add --no-cache \
        freetype-dev \
        libpng-dev \
        jpeg-dev \
        libjpeg-turbo-dev

RUN docker-php-ext-configure gd \
        --with-freetype-dir=/usr/lib/ \
        --with-png-dir=/usr/lib/ \
        --with-jpeg-dir=/usr/lib/ \
        --with-gd

RUN NUMPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) \
    && docker-php-ext-install -j${NUMPROC} gd

这是我使用Linux Alpine操作系统的工作镜像:

FROM php:7-fpm-alpine

# Install all dependencies.
RUN apk --no-cache update \
    && apk --no-cache upgrade \
    && apk add --no-cache $PHPIZE_DEPS \
        freetype-dev \
        libjpeg-turbo-dev \
        libpng-dev && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ && \
    docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gd && \
...

安装libjpeg-turbo和libjpeg-turbo-dev都可以正常工作!这两个软件包有什么区别?需要同时安装吗? - ken
1
据我所见,libjpeg-turbo-dev包括libjpeg-turbo(请参见https://pkgs.alpinelinux.org/package/edge/main/x86/libjpeg-turbo-dev)。开发版本包含C头文件和其他未编译的东西,可能对其他库有用。 - Renrhaf
2
我明白了,所以只包含libjpeg-turbo-dev是安全的。 - ken
1
是的,我想是这样。我编辑了我的答案,删除了不必要的软件包。对于libpng-dev和freetype-dev也是一样的。 - Renrhaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接