我在使用以下命令时遇到问题:
php bin/console d:f:l
[Symfony Component Cache Exception CacheException]
APCu is not activated
而Symfony 3很好地识别了acpu扩展。有关信息,我正在docker上,我已经成功安装了ACPu扩展。
Symfony可以很好地检测缓存,但我不知道为什么脚本不想启动。我试图从其他DockerFile中获得灵感,但仍然存在同样的问题。
我的PHP DockerFile:
FROM php:7.2-fpm-alpine
MAINTAINER Zakariae Filali <filali.zakariae@gmail.com>
ARG TIMEZONE
ENV WORKDIR "/var/www/symfony"
ENV EXT_APCU_VERSION=5.1.17
RUN apk upgrade --update && apk --no-cache add
git autoconf tzdata openntpd libcurl curl-dev coreutils
libmcrypt-dev freetype-dev libxpm-dev libjpeg-turbo-dev libvpx-dev
libpng-dev libressl-dev libxml2-dev postgresql-dev icu-dev
yarn
RUN docker-php-source extract
# ext-apcu
&& mkdir -p /usr/src/php/ext/apcu
&& curl -fsSL https://github.com/krakjoe/apcu/archive/v$EXT_APCU_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/apcu --strip 1
&& docker-php-ext-install apcu
# cleanup
&& docker-php-source delete
RUN apk add --update --no-cache --virtual .build-dependencies $PHPIZE_DEPS
&& pecl install apcu
&& docker-php-ext-enable apcu
&& pecl clear-cache
&& apk del .build-dependencies
RUN apk add --no-cache --virtual build-dependencies icu-dev libxml2-dev freetype-dev libpng-dev libjpeg-turbo-dev g++ make autoconf
RUN docker-php-ext-configure intl
&& docker-php-ext-configure opcache
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/
--with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
--with-xpm-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd iconv pdo pdo_mysql pdo_pgsql curl
bcmath mbstring json xml xmlrpc zip intl opcache
RUN yes '' | pecl install -f mcrypt
RUN echo "extension=mcrypt.so" > /usr/local/etc/php/conf.d/mcrypt.ini
RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone
&& printf '[PHP]ndate.timezone = "%s"n', ${TIMEZONE} > /usr/local/etc/php/conf.d/tzone.ini
&& "date"
RUN curl -sS https://getcomposer.org/installer |
php -- --install-dir=/usr/local/bin --filename=composer
RUN rm -rf /var/cache/apk/*
&& find / -type f -iname *.apk-new -delete
&& rm -rf /var/cache/apk/*
RUN mkdir -p ${WORKDIR}
RUN chown www-data:www-data -R ${WORKDIR}
RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;")
&& curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/alpine/amd64/$version
&& mkdir -p /tmp/blackfire
&& tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp/blackfire
&& mv /tmp/blackfire/blackfire-*.so $(php -r "echo ini_get ('extension_dir');")/blackfire.so
&& printf "extension=blackfire.sonblackfire.agent_socket=tcp://blackfire:8707n" > $PHP_INI_DIR/conf.d/blackfire.ini
&& rm -rf /tmp/blackfire /tmp/blackfire-probe.tar.gz
WORKDIR ${WORKDIR}
CMD ["php-fpm"]
您必须为cli启用apc。如果你启动php -i
,你应该有这样的东西:
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.entries_hint => 4096 => 4096
apc.gc_ttl => 3600 => 3600
apc.mmap_file_mask => no value => no value
apc.preload_path => no value => no value
apc.serializer => php => php
apc.shm_segments => 1 => 1
apc.shm_size => 32M => 32M
apc.slam_defense => On => On
apc.smart => 0 => 0
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.writable => /tmp => /tmp
您可以看到apc.enable_cli
设置为Off
。
因此,将这一行添加到Dockerfile:
RUN echo "apc.enable_cli=1" >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini