php - docker php :7. 1-fpm-alpine 无法构建 GD

标签 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

当尝试使用 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 中使用的相同命令并在容器内以交互方式运行它,它会完美构建。没有错误。

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

最佳答案

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

当我在 shell 中输入命令时,我使用了正确的语法,所以它顺利通过了。

关于php - docker php :7. 1-fpm-alpine 无法构建 GD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884227/

相关文章:

php - Slim Framework -> 创建 XML 输出

php - loadXML 无法处理的错误

docker - 如何实现滚动更新和关系数据库?

linux - 如何防止从缓存中加载 docker 图像?

mysql - 无法在同一 Docker 容器中从 Python 访问 MySQL 数据库

docker - 在rbenv环境中为gem-mecab制作docker镜像时出错

javascript - 提交表单时防止模式关闭

php - 给 Laravel Livewire 组件加水和脱水是什么意思?

symfony - 打开失败 required/symfony/phpunit-bridge/bootstrap.php

elasticsearch - 在同一集群环境中使用dockerfile使用Kibana创建3个Elasticsearch集群和1个Balancer节点