【问题标题】:Docker PHP Laravel Composer Memory exhausted ErrorDocker PHP Laravel Composer 内存耗尽错误
【发布时间】:2021-03-24 11:25:32
【问题描述】:

我有一个在 docker 上工作的 Laravel 项目。当我想添加一个带有“composer require”的包时,会出现这个错误:

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 83886080 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/RuleSet.php on line 90

我已将 php.ini 中的 memory_limit 更改为“-1”。同样的错误继续存在。

我试过这个命令。更新 composer.json 文件,但每次都会被杀死。

php -d memory_limit=-1 /usr/bin/composer require waavi/sanitizer ~1.0

我尝试过“composer update”关于内存限制的同样错误。

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 8192 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/GenericRule.php on line 36

composer.json 文件;

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.3|^8.0",
        "aws/aws-sdk-php-laravel": "^3.1",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "graham-campbell/flysystem": "^3.0",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^8.12",
        "laravel/passport": "^10.1",
        "laravel/tinker": "^2.5",
        "laravel/ui": "^3.2",
        "league/flysystem-aws-s3-v3": "1.0.29",
        "predis/predis": "^1.1",
        "spatie/laravel-activitylog": "^3.16",
        "spatie/laravel-permission": "^3.18",
        "waavi/sanitizer": "~1.0",
        "yajra/laravel-datatables-oracle": "~9.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        "filp/whoops": "^2.0",
        "jason-guru/laravel-make-repository": "^0.0.3",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.3.3"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/Helpers/Helpers.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

我正在使用 MacOS 和 Docker。

我已尝试编写 clear-cache 和 composer install 命令。

【问题讨论】:

    标签: php laravel docker


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

    【讨论】:

      【解决方案2】:

      我的解决方案看起来像 Morteza Pouretemadi 的解决方案。但是有一些修改,因为原版不适合我。

      我的 php 图像解析了额外的 .ini 文件。像这样的:

      解析的其他 .ini 文件:
      /usr/local/etc/php/conf.d/docker-php-ext-mcrypt.ini, /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini, /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini, /usr/local/etc/php/conf.d/docker-php-ext-redis.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini, /usr/local/etc/php/conf.d/docker-php-ext-zip.ini,

      所以,我刚刚在我的项目目录中创建了 memory_limit.ini 文件,其中包含 memory_limit 参数的设置。并在 docker-compose 中链接文件(不是文件夹!)。

      php-apache-environment:
          container_name: php-apache
          build:
              context: .
          volumes:
            - ./public:/var/www/html/
            - ./:/var/www/
            - ./php/ini/memory_limit.ini:/usr/local/etc/php/conf.d/memory_limit.ini
      

      也许它会对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2015-10-01
        • 2020-02-05
        • 1970-01-01
        • 2011-07-12
        • 2011-06-23
        相关资源
        最近更新 更多