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

Posted

技术标签:

【中文标题】Windows 10 (WSL2) 上不支持的操作系统 Laravel 8 with Sail【英文标题】:Unsupported operating system Laravel 8 with Sail on Windows 10 (WSL2) 【发布时间】:2021-12-20 21:29:57 【问题描述】:

我花了 13 个小时编写 Laravel Sail,但我无法在 Windows 10 操作系统上安装它。 但幸运的是,后来我的同事在遇到此错误消息时也找到了解决方案:

Unsupported operating system [MINGW64_NT-10.0-19042]. Laravel Sail supports macOS, Linux, and Windows (WSL2).

在 13 小时内:

首先我将 Docker Desktop 安装到运行 Docker 环境的 Windows 上。 Docker 在 Windows 上需要 WSL-2,在我看来,它似乎也需要安装 Linux 操作系统。这就是我完成整个过程的原因:https://docs.microsoft.com/en-us/windows/wsl/install 我安装了 Ubuntu 20.04 版本。 安装后,我将整个项目复制到 Linux 用户的文件夹中。由于身份验证问题,我无法在其中执行任何操作(例如拉取或推送到我的 git 存储库)。 为了解决这个问题,我根据这两个答案在 Windows 和 Linux 中的项目之间创建了一个符号链接:https://***.com/questions/52545505/how-to-synchronize-code-files-on-windows-with-wsl-linux/62715180#62715180、https://***.com/questions/65227492/laravel-8-laravel-sail-for-dev-on-windows-10-is-slow-how-to-speed-up/65236920#65236920 它没有解决问题,所以我删除了项目中的 /vendor/ 文件夹并根据以下答案运行 composer udpate:https://***.com/a/65513584/10473070 也没有工作。 在我没有成功完成所有下一个过程之后:https://codeburst.io/how-to-use-laravel-sail-with-the-docker-desktop-wsl-2-backend-3768a126a85 这是一个副作用,即 mysql 无法访问远程数据库,当 Docker 最终工作时,该进程消耗了我一半的可用内存。 我最后的尝试是创建一个空的 Laravel 8 项目,以便通过本文档使用 curl 调用进行测试:https://laravel.com/docs/8.x/installation#getting-started-on-windows 结果失败。最后我卸载了 Linux 和 Docker Desktop。

解决方案和部分解释在我的回答中。

【问题讨论】:

【参考方案1】:

解决方案在 Sail 中,问题是一种错误。

但首先是准备步骤:

您需要在 Windows 上安装 Docker Desktop 您需要按照本指南安装和设置 WSL 2:https://docs.microsoft.com/en-us/windows/wsl/install 但是 您绝对不需要在 Windows 上安装 Linux。因为问题是 Sail 中的操作系统检查条件。 在供应商文件夹中找到sail 文件:vendor/laravel/sail/bin/sail 并从此代码更改:

     Verify operating system is supported...
    case "$UNAMEOUT" in
        Linux*)             MACHINE=linux;;
        Darwin*)            MACHINE=mac;;
        *)                  MACHINE="UNKNOWN"
    esac
    
    if [ "$MACHINE" == "UNKNOWN" ]; then
        echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
    
        exit 1
    fi

到这里:


    # Verify operating system is supported...
    #case "$UNAMEOUT" in
    #    Linux*)             MACHINE=linux;;
    #    Darwin*)            MACHINE=mac;;
    #    *)                  MACHINE="UNKNOWN"
    #esac
    #
    #if [ "$MACHINE" == "UNKNOWN" ]; then
    #    echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
    #
    #    exit 1
    #fi

这解决了问题。 为什么我们可以这样做? 因为要检查vendor/laravel/sail/bin/sail bash 文件,您会注意到每个命令都可以在Windows 上的bash 和终端中运行,也没有任何问题。 也许他们忘记在上面的这段代码中添加一个 Windows 检查行。

要完成这些过程,Laravel Sail 就像基于 Laravel Sail 文档的魅力一样工作。

别忘了这只是一个修补程序,因为下一次 Sail 更新将覆盖修改后的 Sail bash 文件!

【讨论】:

以上是关于Windows 10 (WSL2) 上不支持的操作系统 Laravel 8 with Sail的主要内容,如果未能解决你的问题,请参考以下文章

Windows10安装WSL2和Ubuntu的过程

最详尽教程完整介绍-Windows 的 Linux 子系统-WSL1&WSL2

wsl2上的docker非常慢

WSL2 使用“localhost”访问 Windows 服务

在 WSL2 中:安装了适用于 Windows 10 nodejs 的 Ubuntu 20.04,但 npm 无法正常工作

WSL2 BIOS已经开启了VT-x 但windows内安装显示不支持