当我运行docker composer build
或docker compose build --no-cache
时,我得到以下错误。
起初我以为是网络问题。但我通过在docker文件中放置ping命令来测试容器是否可以访问互联网,该文件成功地接收到ping响应。
问题是什么,我该如何解决?
Step 6/16 : RUN apk add --upgrade --no-cache acl bash bash-doc bash-completion autoconf icu-dev libxml2-dev mysql-dev pcre php7-ctype php7-fileinfo php7-gd php7-intl php7-json php7-mbstring php7-openssl php7-simplexml php7-tokenizer php7-xml php7-bcmath php7-pdo php7-pdo_mysql freetype-dev libjpeg-turbo-dev libpng-dev nodejs patch tidyhtml-dev imap-dev libzip-dev git python2
---> Running in 1ae4ac5b75b6
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz
ERROR: unable to select packages:
php7-bcmath (no such package):
required by: world[php7-bcmath]
php7-ctype (no such package):
required by: world[php7-ctype]
php7-fileinfo (no such package):
required by: world[php7-fileinfo]
php7-gd (no such package):
required by: world[php7-gd]
php7-intl (no such package):
required by: world[php7-intl]
php7-json (no such package):
required by: world[php7-json]
php7-mbstring (no such package):
required by: world[php7-mbstring]
php7-openssl (no such package):
required by: world[php7-openssl]
php7-pdo (no such package):
required by: world[php7-pdo]
php7-pdo_mysql (no such package):
required by: world[php7-pdo_mysql]
php7-simplexml (no such package):
required by: world[php7-simplexml]
php7-tokenizer (no such package):
required by: world[php7-tokenizer]
php7-xml (no such package):
required by: world[php7-xml]
python2 (no such package):
required by: world[python2]
ERROR: Service 'application' failed to build: The command '/bin/sh -c apk add --upgrade --no-cache acl bash bash-doc bash-completion autoconf icu-dev libxml2-dev mysql-dev pcre php7-ctype php7-fileinfo php7-gd php7-intl php7-json php7-mbstring php7-openssl php7-simplexml php7-tokenizer php7-xml php7-bcmath php7-pdo php7-pdo_mysql freetype-dev libjpeg-turbo-dev libpng-dev nodejs patch tidyhtml-dev imap-dev libzip-dev git python2' returned a non-zero code: 14
编辑:
尝试了@Mureinik使用FROM php:7.4-fpm-alpine3.15
而不是FROM php:7.4-fpm-alpine
的建议。当我把它打成平手时,它就超过了最初的错误。但我得到了一个不同的错误。请参见下文。
#0 69.23 creating libtool
#0 69.26 appending configuration tag "CXX" to libtool
#0 69.32 configure: patching config.h.in
#0 69.32 configure: creating ./config.status
#0 69.36 config.status: creating config.h
#0 69.39 /bin/sh /usr/src/php/ext/iconv/libtool --mode=compile 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 -o iconv.lo
#0 69.45 mkdir .libs
#0 69.45 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
#0 69.60 /usr/src/php/ext/iconv/iconv.c: In function 'zm_startup_miconv':
#0 69.60 /usr/src/php/ext/iconv/iconv.c:284:4: error: '_libiconv_version' undeclared (first use in this function)
#0 69.60 284 | _libiconv_version >> 8, _libiconv_version & 0xff);
#0 69.60 | ^~~~~~~~~~~~~~~~~
#0 69.60 /usr/src/php/ext/iconv/iconv.c:284:4: note: each undeclared identifier is reported only once for each function it appears in
#0 69.60 /usr/src/php/ext/iconv/iconv.c: In function '_php_iconv_appendl':
#0 69.60 /usr/src/php/ext/iconv/iconv.c:181:15: warning: implicit declaration of function 'libiconv'; did you mean 'iconv'? [-Wimplicit-function-declaration]
#0 69.60 181 | #define iconv libiconv
#0 69.60 | ^~~~~~~~
#0 69.60 /usr/src/php/ext/iconv/iconv.c:453:8: note: in expansion of macro 'iconv'
#0 69.60 453 | if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
#0 69.60 | ^~~~~
#0 69.64 make: *** [Makefile:192: iconv.lo] Error 1
------
failed to solve: executor failed running [/bin/sh -c docker-php-ext-install intl zip pcntl pdo_mysql iconv opcache soap tidy imap bcmath && php -r 'ini_set("display_errors", 1); error_reporting(-1); iconv("UTF-8", "ASCII//TRANSLIT", "foobar");']: exit code: 2
我查看了php7-bcmath
包,但似乎大多数包都出现了相同的问题。该软件包有针对Alpine 3.13到3.15的版本,但最新的Alpine是3.16,它还没有针对该软件包的版本。你可以等到它可用,或者将你的Dockerfile锁定到一个特定的Alpine版本,该版本有这个包的构建,例如:
FROM alpine:3.15
编辑:
根据注释中提供的其他信息,dockerfile使用FROM php:7.4-fpm-alpine
,后者在内部使用FROM alpine
。相反,你可以使用一个锁定到特定Alpine版本的版本:
FROM php:7.4-fpm-alpine3.15
您可能缺少/etc/apk/repositories
下的一些存储库,其中包含这些包。您需要先添加它们,然后才能下载它们。