【发布时间】:2021-06-02 22:09:32
【问题描述】:
我刚刚开始使用 Docker,我正在尝试使用 php:7.4-alpine 映像运行 ZF2 项目,这是我目前拥有的 Dockerfile
FROM php:7.4-alpine
ENV APACHE_DOCUMENT_ROOT /var/www/app/public
COPY ./src /var/www/app
RUN apk add --no-cache \
apache2 \
php-apache2 \
zlib-dev \
icu-dev \
libpng-dev \
composer
RUN docker-php-ext-install \
gd \
intl \
mysqli \
pdo_mysql \
iconv
RUN chmod -R 775 /var/www/app
RUN chown -R www-data:www-data /var/www/app
RUN cd /var/www/app && composer install
COPY ./apache /etc/apache2
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
(我使用多个 RUN 只是为了在构建过程中加快速度,我将在生产环境中更改它)
问题是,我只得到一个 500 错误,日志显示这个
PHP Fatal error: Uncaught Error: Class 'Locale' not found in /var/www/...
根据我搜索的结果,这与 intl 扩展名有关,如您所见,我将它安装在 Dockerfile 中,如果我在容器的 shell 中运行 php -m,则 intl 就在那里,但是,在我设置的一个简单的 ext.php 文件中,包含以下内容:
<?php
var_dump(get_loaded_extensions());
?>
输出是这样的:
array(18) {
[0]=>
string(4) "Core"
[1]=>
string(4) "date"
[2]=>
string(6) "libxml"
[3]=>
string(4) "pcre"
[4]=>
string(4) "zlib"
[5]=>
string(6) "filter"
[6]=>
string(4) "hash"
[7]=>
string(10) "Reflection"
[8]=>
string(3) "SPL"
[9]=>
string(8) "standard"
[10]=>
string(14) "apache2handler"
[11]=>
string(4) "curl"
[12]=>
string(5) "iconv"
[13]=>
string(4) "json"
[14]=>
string(8) "mbstring"
[15]=>
string(7) "openssl"
[16]=>
string(3) "zip"
[17]=>
string(4) "Phar"
}
如你所见,这里不存在 intl
我在使用 mlocati/docker-php-extension-installer 之前对 intl 没有任何问题,但我在使用它时遇到了 iconv 问题,所以我回到了“vanilla”docker-php-ext-install
我在安装之前尝试过使用docker-php-ext-configure intl,在安装之后使用docker-php-ext enable intl,没有任何改变。
【问题讨论】:
-
配置似乎是可选的[?],但启用绝对是必需的。
-
@Sammitch 我尝试使用
docker-php-ext-enable intl,没有任何改变