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

dei*_*mou 6 php docker dockerfile alpine-linux

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

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
Run Code Online (Sandbox Code Playgroud)

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

configure: error: jpeglib.h not found
Run Code Online (Sandbox Code Playgroud)

我可以确认它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
Run Code Online (Sandbox Code Playgroud)

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

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

dei*_*mou 2

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

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