在 Laravel 上使用 Sail 时出现无匹配清单错误

Sna*_*hot 3 macos laravel docker apple-m1 laravel-sail

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

curl -s "https://laravel.build/example-app" | bash
cd example-app
./vendor/bin/sail up
Run Code Online (Sandbox Code Playgroud)

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

ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
Run Code Online (Sandbox Code Playgroud)

Sna*_*hot 7

在配备 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'
Run Code Online (Sandbox Code Playgroud)

添加此行将在 Mac M1 上模拟运行 Intel 映像。您可以在有关 Apple Silicon 的官方 Docker 文档此处阅读有关此内容的一些背景信息。

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

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

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

image: 'mariadb'