问题:
我现在已经看了很多Dockerfile,似乎开启gd的Freetype并不难。然而,尽管我的Dockerfile没有错误,但当我查看phpinfo时,Freetype并没有被启用...
我错过了什么吗?
Call to undefined function imagettfbbox
。 function_exists('imagettfbbox')
的输出为false
。我现在已经看了很多Dockerfile,似乎开启gd的Freetype并不难。然而,尽管我的Dockerfile没有错误,但当我查看phpinfo时,Freetype并没有被启用...
我错过了什么吗?
GD Support enabled
GD Version bundled (2.1.0 compatible)
GIF Read Support enabled
GIF Create Support enabled
PNG Support enabled
libPNG Version 1.6.37
WBMP Support enabled
XBM Support enabled
BMP Support enabled
TGA Read Support enabled
这是我的Dockerfile文件
FROM php:8.1.5-fpm-alpine3.15
ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0" \
PHP_OPCACHE_MAX_ACCELERATED_FILES="20000" \
PHP_OPCACHE_MEMORY_CONSUMPTION="256" \
PHP_OPCACHE_MAX_WASTED_PERCENTAGE="10"
RUN apk add bash curl zip libzip-dev libxpm libxpm-dev libpng libpng-dev libwebp libwebp-dev libjpeg-turbo libjpeg-turbo-dev freetype freetype-dev imagemagick imagemagick-dev && rm /var/cache/apk/*
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
RUN docker-php-ext-install pdo_mysql
RUN apk add $PHPIZE_DEPS
RUN pecl install redis
RUN docker-php-ext-configure zip
RUN docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype
RUN docker-php-ext-install zip opcache
RUN docker-php-ext-install gd
RUN docker-php-ext-enable redis
RUN apk del --purge autoconf g++ make
WORKDIR /var/www
COPY ./dockerfiles/php/php.ini /usr/local/etc/php/php.ini
COPY ./dockerfiles/php/php-fpm-pool.conf /usr/local/etc/php-fpm.d
COPY ./dockerfiles/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini
COPY ./app/ /var/www
RUN PATH=$PATH:/var/www/bin:bin
RUN composer install
CMD ["php-fpm", "-F"]
参考配置如下:
# php.ini
realpath_cache_size=1M
realpath_cache_ttl=300
upload_max_filesize=16M
date.timezone="Europe/Belgrade"
session.save_handler=redis
session.save_path="localhost:6379"
# php-fpm-pool.conf
[www]
user = www-data
group = www-data
listen = 0.0.0.0:9000
listen.backlog = 1023
pm = dynamic
pm.max_children = 8
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping
request_terminate_timeout = 5m
chdir = /
catch_workers_output = yes
clear_env = no
# opcache.ini
[opcache]
opcache.enable=1
opcache.revalidate_freq=0
#opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}
opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}
opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}
opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1
FROM php:8.0-fpm-alpine
和FROM php:7.4-fpm-alpine3.13
,但是都没有成功。 - Josdocker-php-ext-configure gd
上使用--prefix=/usr
就可以解决问题。请查看配置输出中的checking for FreeType 2... yes
行。谢谢。 - Alexey Burdin--with-freetype-dir
(而不是--with-freetype
)。我自己从未尝试过,所以我不知道这是否是问题,或者这是否是一个转移注意力的话题。 - apokryfos