Docker 映像安装失败:"执行器运行失败 [/bin/sh -c docker-php-ext-install ctype exif gd iconv simplexml zip] [...]



Hello stackOverflow Community,

我在安装现有的dockerfile时遇到了一些问题。我有Docker版本4.9.0(80466(,也有新版本4.11。我在Windows10系统上使用WSL2。

我得到了这些错误:

executor failed running [/bin/sh -c docker-php-ext-install ctype exif gd iconv simplexml zip]: exit code: 2
make: *** [Makefile:35: build] Error 1

我认为安装过程中有一些重要的东西:

#5 48.54 mkdir .libs
#5 48.55  cc -I/usr/include -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/usr/src/php/ext/iconv -DPHP_ATOM_INC -I/usr/src/php/ext/iconv/include -I/usr/src/php/ext/iconv/main -I/usr/src/php/ext/iconv -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -I/usr/include -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -c /usr/src/php/ext/iconv/iconv.c  -fPIC -DPIC -o .libs/iconv.o
#5 48.56 In file included from /usr/local/include/php/Zend/zend_config.h:1,
#5 48.56                  from /usr/local/include/php/Zend/zend_portability.h:43,
#5 48.56                  from /usr/local/include/php/Zend/zend_types.h:25,
#5 48.56                  from /usr/local/include/php/Zend/zend.h:27,
#5 48.56                  from /usr/local/include/php/main/php.h:33,
#5 48.56                  from /usr/src/php/ext/iconv/iconv.c:25:
#5 48.56 /usr/local/include/php/main/../main/php_config.h:1976: warning: "ICONV_BROKEN_IGNORE" redefined
#5 48.56  1976 | #define ICONV_BROKEN_IGNORE 0
#5 48.56       |
#5 48.56 In file included from /usr/src/php/ext/iconv/iconv.c:22:
#5 48.56 /usr/src/php/ext/iconv/config.h:59: note: this is the location of the previous definition
#5 48.56    59 | #define ICONV_BROKEN_IGNORE 1
#5 48.56       |
#5 48.71 /usr/src/php/ext/iconv/iconv.c: In function 'zm_startup_miconv':
#5 48.71 /usr/src/php/ext/iconv/iconv.c:284:25: error: '_libiconv_version' undeclared (first use in this function)
#5 48.71   284 |                         _libiconv_version >> 8, _libiconv_version & 0xff);
#5 48.71       |                         ^~~~~~~~~~~~~~~~~
#5 48.71 /usr/src/php/ext/iconv/iconv.c:284:25: note: each undeclared identifier is reported only once for each function it appears in
#5 48.72 /usr/src/php/ext/iconv/iconv.c: In function '_php_iconv_appendl':
#5 48.72 /usr/src/php/ext/iconv/iconv.c:181:15: warning: implicit declaration of function 'libiconv'; did you mean 'iconv'? [-Wimplicit-function-declaration]
#5 48.72   181 | #define iconv libiconv
#5 48.72       |               ^~~~~~~~
#5 48.72 /usr/src/php/ext/iconv/iconv.c:453:29: note: in expansion of macro 'iconv'
#5 48.72   453 |                         if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
#5 48.72       |                             ^~~~~
#5 48.76 make: *** [Makefile:192: iconv.lo] Error 1
------
executor failed running [/bin/sh -c docker-php-ext-install ctype exif gd iconv simplexml zip]: exit code: 2
make: *** [Makefile:35: build] Error 1

这是Dockerfile:中的内容

ARG PHP_VERSION=7.4
FROM php:${PHP_VERSION}-cli-alpine AS betl
RUN apk add --no-cache 
zip 
zlib-dev 
openssh 
rsync 
freetype-dev 
libjpeg-turbo-dev 
libpng-dev 
libxml2-dev 
libzip-dev 
git 
;
#Test: delet iconv im next line
RUN docker-php-ext-install ctype exif gd iconv simplexml zip 
#Test: new from Rollexpert 20 and 21:
#Test:  RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ gnu-libiconv=1.15-r3
#Test: ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
RUN apk add --no-cache libssh2-dev autoconf build-base
RUN pecl install ssh2-1.3.1 && docker-php-ext-enable ssh2
RUN apk add jpeg-dev libpng-dev 
&& docker-php-ext-configure gd --with-jpeg 
&& docker-php-ext-install -j$(nproc) gd
ENV COMPOSER_HOME /composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV PATH /composer/vendor/bin:$PATH
ENV PHP_CONF_DIR=/usr/local/etc/php/conf.d
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN echo "memory_limit=-1" > $PHP_CONF_DIR/99_memory-limit.ini
WORKDIR /betl
ENTRYPOINT ["sh", "./bin/lconsole"]

扩展:ctypeiconvsimplexml已经包含在标准php:8-fpm-alpine映像中,因此不应该安装它们。只要从你的RUN docker-php-ext-install ...行中删除他们的名字,你就可以了。

供参考:

$ docker run php:8-fpm-alpine php -m        
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
random
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]

最新更新