【问题标题】:PHP memory size exhausted in docker with magento/bin setup:di:compiledocker 中使用 magento/bin setup:di:compile 耗尽 PHP 内存大小
【发布时间】:2019-06-28 05:10:04
【问题描述】:

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

[2019-02-04 12:15:26] main.ERROR: /usr/local/bin/php -f /var/www/html/m230/bin/magento setup:di:compile 2>&1 开始编译。 %message% 0/7 [>---------------] 0% ---------------] 0% ---- ------------------------------------] 0% ---------------------] 14% 1 sec 76.0 MiB 存储库代码生成... 1/7 [====>------------------------] 14% 1 sec 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

【问题讨论】:

    标签: php docker magento magento2


    【解决方案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
    

    在你的 php Dockerfile 目录下的 ini/conf.d/ 创建一个名为 memory_limit.ini 的文件 所以你的目录会是 .../php/ini/conf.d/memory_limit.ini 里面的 memory_limit.ini

    memory_limit = -1
    

    【讨论】:

    • 谢谢。有用。但是我还是想知道为什么我不能直接使用php -dmemory_limit=-1 bin/magento setup:di:compile
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      Docker 方式

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

      ~$ cd /usr/local/etc/php/conf.d/ #创建和/或更新一个名为 docker-php-memlimit.ini 的文件(注释) #in /usr/local/etc/php/conf.d/(评论) ~$ echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini #从下面的行中,我们使用 -1 将内存设置为无限制(注释) #或者你可以通过改变'memory_limit = 512M'来设置分配的数量(注释) # 然后用下面的代码检查内存(注释) ~$ php -r "echo ini_get('memory_limit').PHP_EOL;"

      为避免每次需要安装时都运行 bash,请将文件添加到 dockerfile 中,如下所示:

      #dockerfile 运行 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多