【问题标题】:Allowed Memory Size Exhausted when running cache:clear and cache:warmup运行缓存时允许的内存大小耗尽:清除和缓存:热身
【发布时间】:2020-02-29 22:39:01
【问题描述】:

我正在使用 docker 运行 symfony 应用程序,并且有以下 Dockerfile:

# PHP Image
FROM php:7.3-fpm-alpine as base

WORKDIR /var/www/html

RUN set -xe \
    && apk add --no-cache bash icu-dev \
    libzip-dev \
    libzip \ 
    zlib-dev  \
    zlib \
    libpng-dev \
    libsodium-dev \
    libtool \
    libwebp-dev \
    libxml2-dev \
    libxpm-dev \
    php7-dev \
    imagemagick-dev \   
    g++ \
    gcc \
    make \  
    imagemagick \
    imagemagick-libs \
    && docker-php-ext-install zip bcmath pdo_mysql mysqli mbstring opcache pdo pdo_mysql \
    && docker-php-ext-install gd \
    && pecl install imagick apcu \
    && docker-php-ext-enable apcu opcache

EXPOSE 9000
CMD ["php-fpm", "--nodaemonize"]

# Composer Image
FROM composer:1.8 as vendor

COPY services/api/composer.json /app/composer.json
COPY services/api/composer.lock /app/composer.lock

RUN cd /app && composer install --prefer-dist --no-scripts --no-progress --no-suggest --no-interaction

# PHP APP Image
FROM base as app

COPY ./services/api/bin /var/www/html/bin
COPY ./services/api/src /var/www/html/src
COPY ./services/api/config /var/www/html/config
COPY ./services/api/public /var/www/html/public
COPY ./services/api/templates /var/www/html/templates
COPY ./services/api/.env /var/www/html/.env

COPY --from=vendor /app/vendor /var/www/html/vendor
COPY --from=vendor /usr/bin/composer /usr/bin/composer

COPY ./docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf
COPY ./docker/php/php.ini /usr/local/etc/php/conf.d/php.ini

RUN mkdir -p var/log  && chmod -Rf 777 var/log
RUN mkdir -p var/cache/prod  && chmod -Rf 777 var/cache/prod
RUN chmod -Rf 777 var/
# RUN HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
# RUN setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
# RUN setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

COPY ./docker/php/entrypoint*.sh /
RUN chmod +x /entrypoint*.sh

ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
EXPOSE 9000
CMD ["php-fpm", "--nodaemonize"]

# NGINX Image

FROM nginx:alpine as webservice
RUN apk add --no-cache bash coreutils grep sed
COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

RUN mkdir -p /var/www/html && chmod 777 /var/www/html
COPY --from=app /var/www/html /var/www/html
COPY --from=vendor /app/vendor /var/www/html/vendor

CMD /bin/sh -c "exec nginx -g 'daemon off;'"

我的 php-fpm 容器有这个入口点:

#!/usr/bin/env bash
set -eux

cd /var/www/html

until nc -z -v -w30 ${DATABASE_HOST} ${DATABASE_PORT}
do
  echo "Waiting for database connection..."
  # wait for 5 seconds before check again
  sleep 5
done

set +e
php bin/console cache:clear
php bin/console cache:warmup
php bin/console doctrine:migrations:migrate --no-interaction

exec "$@"

但是,当我尝试运行容器并开始执行入口点脚本时,它会引发错误:

php_1 | + php bin/控制台缓存:清除 php_1 | PHP致命错误: 允许的内存大小为 2097152 字节已用尽(试图分配 32768 字节)在 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php 在第 129 行

我怀疑这是 var/cache 和 var/log 的权限错误,但我已经尝试过 chmod 777。我真的不知道我在哪里搞砸了。

注意:我不想将 memory_limit 增加到 -1,因为这是个坏主意,会导致我的主机死机。

非常感谢!

【问题讨论】:

  • 您不必将memory_limit 设置为-1。您是否尝试过高于当前 2 MB 的值? 5个也许...

标签: php docker symfony fpm


【解决方案1】:

在你的 symfony 命令中试试这个:

php -d memory_limit=128M bin/console cache:clear

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2018-08-04
    相关资源
    最近更新 更多