【问题标题】:Laravel migration not working in docker, SerializableClosure errorLaravel 迁移在 docker 中不起作用,SerializableClosure 错误
【发布时间】:2022-01-20 18:52:57
【问题描述】:

登录 docker 容器并运行时遇到问题

php artisan 迁移 --seed

我之前有过这个工作,所以我不确定为什么会这样:

Opis\Closure\SerializableClosure 实现了 Serializable 接口,已弃用。实现 __serialize() 和 __unserialize() 代替(或者另外,如果需要支持旧的 PHP 版本)

这就是我运行的顺序:

来自 MAC:作曲家安装 来自 MAC:扬帆起航 -d 来自 MAC:sails exec 容器 ID bash 从容器:npm install 来自容器:php artisan migrate --seed

容器在 PHP 8.1 上运行,在 ubuntu 上使用 MySql。 Composer install 从容器外部工作以创建供应商文件夹,如果有帮助,这里是 composer.json:

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^7.3|^8.0",
        "ext-dom": "20031129",
        "darkaonline/l5-swagger": "^8.0",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.40",
        "laravel/sanctum": "^2.11",
        "laravel/tinker": "^2.5"
    },
    "require-dev": {
        "barryvdh/laravel-ide-helper": "^2.10",
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.3.3"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "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"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "composer/package-versions-deprecated": true
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

和 docker-compose:

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    acklams-api:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - acklams-mysql
    acklams-mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
          retries: 3
          timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local

我不能确定,但​​我认为应该安装 php 8.0 而不是 8.1,图片:./vendor/laravel/sail/runtimes/8.0 ?

下面是我在容器中看到的图像,我运行 php -v 显示 8.1 而不是 8.0,最后当我尝试迁移时出现错误:

编辑

我注意到它已经安装了 8.1 和 8.0,所以我刚刚切换,它现在可以工作了。奇怪的是如何随机开始发生的。

【问题讨论】:

  • @MaikLowrey 试试什么伙伴?你刚刚引用了我?我是说 docker compose 的上下文为 8.0,但是当我运行 php -v 它显示 8.1 时,我认为这可能是错误发生的原因。那么知道为什么它安装了不正确的php版本吗? - 我还添加了截图
  • 在容器内部,它安装了 php 8.1,即使 docker 文件显示为 8.0
  • 我注意到它已经安装了 8.1 和 8.0,所以我刚刚切换,它现在可以工作了
  • “试试看”就是我之前的意思。

标签: laravel docker


【解决方案1】:

我注意到它已经安装了 8.1 和 8.0,所以我刚刚切换它现在可以工作了

【讨论】:

  • 完美!并感谢您的反馈
  • 我还是想知道为什么当配置明确说 8.0 时它同时安装了这两个
  • 也许检查你的dockerfile!?你能在你的问题中分享它吗?
  • 如果您需要帮助切换,请运行sudo update-alternatives --config php。 (参考stackoverflow.com/a/48336881/1277350
猜你喜欢
  • 2017-06-18
  • 2020-10-25
  • 2018-06-18
  • 2021-02-08
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多