使用magento / bin setup:di:compile在docker中耗尽了PHP内存大小

时间:2019-02-04 12:50:13

标签: php docker magento magento2

php bin/magento setup:di:compile图片容器中运行php bin/magento deploy:mode:set productionphp:7.1-fpm后,我在日志文件中收到此错误。

  

[2019-02-04 12:15:26] main.ERROR:/ usr / local / bin / php -f / var / www / html / m230 / bin / magento设置:di:编译2>&1   编译开始。   %message%0/7 [> ---------------------------] 0%<1秒72.0 MiB%message%0/7 [ > ---------------------------] 0%<1秒72.0 MiBProxies代码生成... 0/7 [> ---- -----------------------] 0%<1秒72.0 MiB   代理代码生成... 1/7 [====> -----------------------] 14%1秒76.0 MiB   储存库代码生成... 1/7 [====> -----------------------] 14%1秒76.0 MiB   致命错误:在第81行的/var/www/html/m230/setup/src/Magento/Setup/Module/Di/Code/Reader/FileClassScanner.php中,耗尽了134217728字节的内存大小(试图分配36864字节)   检查https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors以获得有关如何处理内存不足错误的更多信息。 [] []

我试图通过运行php -dmemory_limit=1G bin/magento setup:di:compile甚至是php -dmemory_limit=-1 bin/magento setup:di:compile来增加内存限制

如果我使用php:7.1-apache图片(我使用相同的源代码和数据库,只需更改图片)就不会发生此错误

此错误在我的笔记本电脑(运行arch-linux)和台式机(运行ubuntu)上均发生。我知道他们足够强大,可以执行该命令。

我使用的Dockerfile:

FROM php:7.1-fpm

# Install necessary libraries for Magento2
RUN apt-get -y update \
    && apt-get install -y \
        libmcrypt-dev \
        libxslt-dev \
        zlib1g-dev \
        libpng-dev \
        libjpeg-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev
RUN docker-php-ext-install -j$(nproc) iconv
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install pdo_mysql mcrypt xsl intl zip bcmath -j$(nproc) gd soap

# Install xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN echo "xdebug.remote_enable=on\n\
xdebug.remote_autostart=off\n\
xdebug.remote_host=10.5.0.1\n\
xdebug.remote_port=9000\n\
xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# Set memory_limit
RUN echo "php_admin_value[memory_limit] = 2G" >> /usr/local/etc/php-fpm.d/www.conf

# Install cron
#RUN apt-get install -y cron

# Remove apt cache
RUN rm -rf /var/lib/apt/lists/*

# Create non-root user
ARG USER_NAME
ARG UID
RUN useradd -m -U ${USER_NAME} -u ${UID} -p1 -s /bin/bash -G root -o

# Edit PS1 in basrc
RUN echo "PS1='${debian_chroot:+($debian_chroot)}\w\$ '" >> /home/${USER_NAME}/.bashrc

# Change www-data user to ${USER_NAME}
RUN sed -i -e "s/www-data/${USER_NAME}/" /usr/local/etc/php-fpm.d/www.conf

3 个答案:

答案 0 :(得分:9)

Docker方式

通过在Docker容器bash ~$ php -r "echo ini_get('memory_limit').PHP_EOL;"上运行此命令来确认内存不足。它应该输出128M。要增加,请检查容器中是否存在/usr/local/etc/php/conf.d/路径。我相信,如果您的php回购是从官方Docker Hub构建和维护的,那应该会。 如果存在:


~$ cd /usr/local/etc/php/conf.d/
#create and or update a file called docker-php-memlimit.ini (comment)
#in /usr/local/etc/php/conf.d/(comment)
~$ echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
#from the line below we setting memory to unlimited by using -1 (comment)
#Or you can set amount allocated by changing 'memory_limit = 512M' (comment)

# then check the memory with the following code (comment)
~$ php -r "echo ini_get('memory_limit').PHP_EOL;"

为避免每次需要安装bash时都运行bash,请按照以下步骤将文件添加到dockerfile中:


#dockerfile
RUN cd /usr/local/etc/php/conf.d/ && \
  echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini

如果docker build无法将目录更改为/usr/local/etc/php/conf.d/,它将中断。您可以通过其他方式从资源库中浏览资源。

参考:https://github.com/nextcloud/docker/issues/447

答案 1 :(得分:1)

在docker-compose.yml

php:
    container_name: php-server
    build: ./php/
    volumes:
      - ./..:/var/www
      - ./php/ini:/usr/local/etc/php // note that this line maps docker's /usr/local/etc/php

在ini / conf.d /下的php Dockerfile目录中,创建一个名为memory_limit.ini的文件 因此,您的目录将是... / php / ini / conf.d / memory_limit.ini内部memory_limit.ini

memory_limit = -1

答案 2 :(得分:0)

您必须更改php docker容器中PHP cli的内存限制。