在 Laravel 上使用 Sail 时没有匹配的清单错误

Posted

技术标签:

【中文标题】在 Laravel 上使用 Sail 时没有匹配的清单错误【英文标题】:No Matching Manifest Error when using Sail on Laravel 【发布时间】:2021-08-29 02:15:08 【问题描述】:

我正在尝试使用 Laravel Sail 在 Laravel 中设置一个基本项目。根据official Laravel documentation,以下命令将创建一个名为“example-app”的新 Laravel 应用程序并启动 Laravel Sail。

curl -s "https://laravel.build/example-app" | bash
cd example-app
./vendor/bin/sail up

但是,运行这些命令后,我看到以下错误消息:

ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries

【问题讨论】:

【参考方案1】:

在带有 Apple M1 芯片的 Mac 上使用 Laravel Sail 时会出现此错误。 Laravel Sail 提供的 docker-compose 文件默认使用 mysql。按照配置,docker-compose 文件正在尝试使用未知版本的 MySQL (linux/arm64/v8)。此操作失败并显示上述错误消息。

这可以通过打开 Laravel 项目根文件夹中的 docker-compose.yml 文件,搜索名为 mysql 的部分并在 image: 行下方添加以下内容来解决

platform: 'linux/amd64'

添加此行将在 Mac M1 的仿真下运行 Intel 映像。您可以在官方Docker document about Apple Silicon 和here 中阅读有关这方面的一些背景信息。

如果您的用例可能,也可以通过将映像切换到 MariaDB 而不是 MySQL 来解决此问题。 MariaDB 基本上与 MySQL 二进制兼容。如果可能的话,使用 MariaDB 可能是一个更好的选择,因为正如 Docker 文档中提到的那样

尝试在 Apple Silicon 机器上运行基于 Intel 的容器 仿真可能会崩溃,因为 qemu 有时无法运行容器。

在 M1 Mac 上的仿真中使用 MySQL 容器可能会导致启动 Sail 时出现分段错误等问题 - 事实上,我曾在一个案例中看到过这个问题。切换到 MariaDB 解决了这个问题。您可以通过将 docker-compose.yml 文件中 mysql 服务的 image: 行更改为:

将 Laravel Sail 切换到 MariaDB 而不是 MySQL

image: 'mariadb'

【讨论】:

【参考方案2】:

在 Github 上发布了这个,我想我也会把它留在这里 https://github.com/laravel/framework/issues/38370

Laravel Version: 8.54.0
php Version: 8.0
Database Driver & Version: MySQL 8
MacOS: Big Sur 11.5.2

Mac M1 Docker Laravel Sail MySQL 8 不会拉臂拱 示例应用不会在 M1 芯片上“起航”(docker-compose up)

错误:

Pulling mysql (mysql:8.0)...
8.0: Pulling from library/mysql
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries

https://github.com/laravel/framework/blob/fc0a4a7400cf528d05fd5660ffe8db372c50baa9/docker-compose.yml#L9

一个简单的解决方法是改用 MariaDB:

docker-compose.yml:

    mysql:
        image: 'mariadb'

完成?

如果你真的需要 MySQL:

docker 推荐的,我不需要。

打开一个终端 -> softwareupdate --install-rosetta

Docker-compose.yml

    mysql:
        platform: linux/x86_64
        image: 'mysql:8.0'

之后,会拉取正确的 MySQL 镜像。

sail up

Pulling mysql (mysql/mysql-server:8.0.23)...
8.0.23: Pulling from mysql/mysql-server

完成?

其他链接: https://docs.docker.com/docker-for-mac/apple-silicon/ Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"

【讨论】:

以上是关于在 Laravel 上使用 Sail 时没有匹配的清单错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Sail 不会在 Ubuntu 20.04 上构建 - groupadd:无效的组 ID 'sail'

无法在 .env 上为 Laravel Sail 设置 APP_PORT

带有 Laravel Sail 和版本控制的 Laravel 8 开发项目

Laravel Sail 数据库和用户未创建

Laravel Sail (docker), nginx 反向代理 - Html 呈现 localhost:8002 而不是 site.xyz

Windows 10 (WSL2) 上不支持的操作系统 Laravel 8 with Sail