Laravel Sail 依赖于 docker 给 laravel 本地化开发提供了一个开发环境。它在 laravel 高版本里是默认安装的。

执行 php artisan sail:install 会生成一个 docker-composer.yml 文件,默认选择安装的项为 mysql,之后可以根据需求安装 redis 等。

在启动 Sail 时,会根据 docker-composer.yml 文件安装 sail-8.2/app 等,然后安装过程中失败报错:

 ...
45.59 tee: /etc/apt/keyrings/ppa_ondrej_php.gpg: No such file or directory
------
failed to solve: process
...

因为 laravel sail v1.23 当前版本默认使用的是 vendor/laravel/sail/runtimes/8.2/Dockerfile,里面安装的是 php-8.2,而本地是 php 8.1。感觉可能跟本地的 php 版本有关系,就操作 在 Mac 上使用 Homebrew 升级到 PHP 8.2

然后在此启动依然报相同的错。现在想想,他是要在 docker 镜像容器中安装 php,8.1 还是 8.2 对 laravel 来说都没有问题,因为 laravel 10.10 对于 php 8.1 和 8.2 都是支持的。

之后从 Dockerfile 中的 FROM ubuntu:22.04 猜测是不是需要先安装一下这个 ubuntu:22.04。使用 docker pull ubuntu:22.04 安装镜像之后再次执行,没有用。

learnku 社区 里找到一个 Laravel Sail 环境下启动项目出现: ERROR: Service 'laravel.test' failed to build,报错信息不一样:failed to fetch http://......。问答里面提到需要更换 docker 的镜像源,且是更改为中科大的镜像源。但其中的 vendor/laravel/sail/runtimes/8.2/sources.list 文件在当前的 sail 版本里不存在。尝试创建该文件并复制粘贴镜像地址,对启动没有影响,依然报相同的错。

然后想到,我之前也做过更新 docker 源,Docker Desktop 设置 -> Docker Engineregistry-mirrors 项。之前使用的是阿里云的镜像 "https://1bflxq6k.mirror.aliyuncs.com",,替换成使用中科大的镜像 "https://docker.mirrors.ustc.edu.cn", 保存提交即可。注意:不要使用添加多条镜像,只使用一条即可。

然后再次启动 Sail,成功!

其他的 docker 镜像:

    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://cr.console.aliyun.com",
    "https://mirror.ccs.tencentyun.com"