我正在生产中部署我的symfony项目。当我只运行docker-compose up
时,它就可以正常工作。但是,我的部署脚本遇到问题,请尝试在导航器中访问网页。
严重错误:耗尽的134217728字节允许的内存大小(尝试 分配20480个字节) /var/www/redaph/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php 在第107行
严重错误:耗尽的134217728字节允许的内存大小(尝试 分配65536字节) /var/www/redaph/vendor/composer/ClassLoader.php,第444行
奇怪的是,在我的dockerfile中,我希望我的PHP_MEMORY_LIMIT为256M。当我进入容器时,会看到以下内容:
root@125de315edca:/var/www/redaph# php -i | grep memory_limit
memory_limit => 128M => 128M
为什么我的Docker Symfony项目占用了如此多的内存?
如果正常,则: 如何正确增加我的dockerfile中的PHP_MEMORY_LIMIT?
deploy_prod.sh
#!/usr/bin/env bash
PROJECT=symfony
docker-compose up -d
docker exec redaph_symfony_1 php bin/console d:s:u --force
docker exec redaph_symfony_1 php bin/console c:c
Dockerfile:
FROM php:7.2-apache
ENV \
APACHE_ADMIN_EMAIL=webmaster@localhost \
PHP_TIME_ZONE=Europe/London \
PHP_MEMORY_LIMIT=256M \
PHP_UPLOAD_MAX_FILESIZE=32M \
PHP_POST_MAX_SIZE=32M
ARG WORK_DIR
WORKDIR $WORK_DIR
COPY composer.lock $WORK_DIR
COPY composer.json $WORK_DIR
ENV COMPOSER_ALLOW_SUPERUSER 1
RUN apt-get update \
&& apt-get install -y -f apt-transport-https \
libicu-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libpq-dev \
acl \
cron \
git \
zip \
&& pecl install mongodb \
&& docker-php-ext-enable mongodb \
&& docker-php-ext-install \
exif \
gd \
intl \
opcache \
pdo_mysql \
pdo_pgsql \
zip \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& composer install --no-dev --prefer-dist --optimize-autoloader --no-scripts \
&& chown -R www-data:www-data $WORK_DIR \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& a2enmod rewrite \
&& service cron start
答案 0 :(得分:1)
问题似乎更可能是您应用的代码/配置。可能无需触摸Docker。
根据您配置的处理程序,研究限制独白的缓冲区大小(configuration code here-搜索buffer_size
)。
使用Composer,在开发人员本地运行composer update
。部署时,运行composer install
。假设安装有一个update
可以使用,install
比composer.lock
需要更多的内存来解析依赖关系图。
这似乎是根据您发布的dockerfile进行的操作,但是在此过程中某处可能正在发生/干扰该操作。我会验证composer.lock
包含您认为的内容,以防万一。
您还可以在运行作曲家时尝试使用标志memory_limit=-1
:
php -d memory_limit=-1 composer install rest-of-args-here
如果这还不够,请提供您正在使用的Symfony版本。发布与独白相关的composer.json
和Symfony配置。
答案 1 :(得分:1)
这将有助于了解发生错误的那些行中的内容。
关于如何更改您的限额:我的“正确方法”,基本上我可以想到2个:
通过单线编辑将RUN放入dockerfile中,这应该可以工作https://serverfault.com/questions/96372/sed-php-ini-memory-limit。
在本地保留一个php.ini文件,该文件将被复制到容器中。要使Docker复制它,请在docker-compose文件中的音量键下一行(一行)
对于您的情况,我觉得这很麻烦,只有在文件需要大量/连续编辑的情况下,我才会这样做。
还有另一种选择,但是每次构建时都需要您这样做,但这并没有太大用处:
从这里开始,只要您拥有正确的工具(sed,vim和所需的任何工具),就可以编辑文件。