Разрешенный объем памяти исчерпан при запуске кеша: очистить и кеша: прогреть - PullRequest
0 голосов
/ 04 ноября 2019

Я запускаю приложение Symfony с Docker и у меня есть следующий 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

Iподозреваю, что это ошибка разрешения для var / cache и var / log, но я уже пробовал chmod 777. Я действительно понятия не имею, где еще я запутался.

ПРИМЕЧАНИЕ: я не хочу увеличивать memory_limit до -1, потому что это плохая идея и приведет к зависанию моего хост-компьютера.

Большое спасибо!

1 Ответ

0 голосов
/ 05 ноября 2019

Попробуйте это в вашей команде symfony:

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