【发布时间】: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,所以我刚刚切换,它现在可以工作了
-
“试试看”就是我之前的意思。