docker php:7.1-fpm-alpine无法构建GD

时间:2017-03-19 07:55:12

标签: php docker dockerfile alpine

尝试使用我的Dockerfile中的以下摘录从官方php:7.1-fpm-alpine图像构建:

FROM php:7.1-fpm-alpine

RUN set -ex \
    apk add --no-cache --virtual .build-deps \
    freetype-dev \
    libjpeg-turbo-dev \
    libpng-dev \
\
    && docker-php-ext-configure gd \
        --with-freetype-dir=/usr \
        --with-png-dir=/usr \
        --with-jpeg-dir=/usr \
    && docker-php-ext-install gd \
    && apk del .build-deps

尝试使用docker build进行构建时,GD在./configure期间失败并出现以下错误:

configure: error: jpeglib.h not found

我可以确认jpeglib.h存在,并且正好是我认为它应该的位置(实际上,确切地说它在Debian变体中的位置):

$ docker run -it --rm php:7.1-fpm-alpine /bin/sh
>$ apk add --no-cache libjpeg-turbo-dev \
   && find /usr -type f -name 'jpeglib.h'
   ...
   /usr/include/jpeglib.h

但是如果我将完全与dockerfile中使用的命令相同并在容器内以交互方式运行它,那么它可以完美地构建。没有错误。

这是一个错误,还是我错过了什么?

2 个答案:

答案 0 :(得分:2)

问题是一个非常简单的语法错误; apk命令之后的set调用需要以&&开头,否则解释器会将整个apk调用视为set的一组参数。在这种情况下,不会添加包,因此jpeglib.h不存在。

当我在shell中输入命令时,我使用了正确的语法,因此它没有错误地传递。

答案 1 :(得分:0)

是的,您应该这样写

RUN set -ex \
    && apk add --no-cache --virtual .build-deps \