尝试使用我的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中使用的命令相同并在容器内以交互方式运行它,那么它可以完美地构建。没有错误。
这是一个错误,还是我错过了什么?
答案 0 :(得分:2)
问题是一个非常简单的语法错误; apk
命令之后的set
调用需要以&&
开头,否则解释器会将整个apk
调用视为set
的一组参数。在这种情况下,不会添加包,因此jpeglib.h
不存在。
当我在shell中输入命令时,我使用了正确的语法,因此它没有错误地传递。
答案 1 :(得分:0)
是的,您应该这样写
RUN set -ex \
&& apk add --no-cache --virtual .build-deps \