laravel sail开发环境搭建过程中,创建测试项目失败

背景:

本人使用的是windows11操作系统,之前在本地已经搭建好了laravel环境并且已经使用了一段时间,最近希望按照教程做做项目练练手,按照教程想通过laravelsail创建一个项目,下载了新版的docker以及ubantu,也配置了Docker Hub 镜像加速(阿里的也试了)

laravel sail开发环境搭建过程中,创建测试项目失败

问题

通过命令curl -s laravel.build/example-app | bash创建项目的时候一直报连接超时,而且ping github不通,但是ping baidu和ping laravel.build是通的,换了各种源都不行,也尝试了配置dns,搞不清到底哪里配置出问题了。

laravel sail开发环境搭建过程中,创建测试项目失败

问题解决

感谢各位的回答,问题我解决了,在这里总结一下过程。

1.最开始按照如下方法修改了wsl的dns设置,不起作用。

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'

2.我发现子系统里ping不通github和Google,但可以ping国内网站,怀疑是这个问题。但一看主系统也ping不通,我有clash,可以访问外网,但ping不通(可能和那啥有关系,具体还不清楚咋回事)。

后来尝试在C:\Windows\System32\drivers\etc\HOSTS和ubantu的etc/hosts文件里配置ip和主机的映射才行,我配了140.82.113.3 github.com之后就可以ping通了,但创建项目依然失败,也不是这个原因。

3.关于这个问题的转机出现在一篇博客,按照那篇博文,我用wget命令拉取了执行脚本,我得以了解laravel.build的具体执行过程。
最开始按照建议尝试在脚本中添加了代理、修改了composer的镜像配置,但都不起作用。

在此之前我没有用过docker,并不是很了解,最开始我以为是这个命令是在子系统里创建一个容器,并在容器内部署项目,但后来发现脚本第一行docker run –rm(容器运行完毕后自动删除容器),实际上这个命令是利用容器来在本地部署,所以是在容器内执行下载安装的过程出现了问题。

4.在各种东找找西查查,试来试去之后,我发现可能是docker的域名解析失效了。这是我按评论区建议在脚本中加入composer的镜像配置后的报错。因为我在ubantu中ping所有国内网站都是可以的,也就是说如果脚本配置了镜像源,不应该域名解析超时,只可能是docker环境中域名解析出问题了。

为了验证这个猜想,我在网上找了个方法

docker run --rm alpine ping mirrors.tencent.com

执行这个命令后,果真域名解析失败,而在ubantu中ping mirrors.tencent.com是成功的,说明确实是docker的问题。

5.最后根据blog.csdn.net/JineD/article/detail... 提供的方法,windows下在C:\Users<用户名>.docker\daemon.json 中添加”dns”:[“8.8.8.8”,”114.114.114.114”]
执行curl -s laravel.build/example-app | bash

终于成功了!

虽然我也不清楚我默认的docker配置为啥会域名解析失效,但这又是另一个问题了:smile:

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 19

看报错的详细信息,解析 api.github.com 失败了,所以还是网络的问题。

打开网址 https://laravel.build/example-app 可以看到安装的源码,核心是以下内容

docker run --rm \
    --pull=always \
    -v "$(pwd)":/opt \
    -w /opt \
    laravelsail/php83-composer:latest \
    bash -c "laravel new example-app --no-interaction && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "

查看 laravel new 命令源码 https://github.com/laravel/installer/blob/master/src/NewCommand.php#L160

$commands = [
            $composer." create-project laravel/laravel \"$directory\" $version --remove-vcs --prefer-dist",
        ];

所以,将 https://laravel.build/example-app 这个地址返回的内容稍作修改然后保存为 .sh 文件运行即可 。

docker info > /dev/null 2>&1

# Ensure that Docker is running...
if [ $? -ne 0 ]; then
    echo "Docker is not running."

    exit 1
fi

docker run --rm \
    --pull=always \
    -v "$(pwd)":/opt \
    -w /opt \
    laravelsail/php83-composer:latest \
    bash -c "composer config repo.packagist composer https://mirrors.tencent.com/composer/ && laravel new example-app --no-interaction && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "

cd example-app

# Allow build with no additional services..
if [ "mysql redis meilisearch mailpit selenium" == "none" ]; then
    ./vendor/bin/sail build
else
    ./vendor/bin/sail pull mysql redis meilisearch mailpit selenium
    ./vendor/bin/sail build
fi

CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'

echo ""

if sudo -n true 2>/dev/null; then
    sudo chown -R $USER: .
    echo -e "${BOLD}Get started with:${NC} cd example-app && ./vendor/bin/sail up"
else
    echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
    echo ""
    sudo chown -R $USER: .
    echo ""
    echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd example-app && ./vendor/bin/sail up"
fi
3个月前 评论
fffswhk (作者) 3个月前
forfaye (楼主) 3个月前
forfaye (楼主) 3个月前
sanders 3个月前
forfaye (楼主) 3个月前
sanders 3个月前
forfaye (楼主) 3个月前
forfaye (楼主) 3个月前

不会科学の上网的话,就用composer或者laravel脚手架创建啊

3个月前 评论
forfaye (楼主) 3个月前
forfaye (楼主) 3个月前
Aoyamakiri 3个月前

clash打开“允许局域网”选项,ubuntu里面配置代理,

export http_proxy=http://你的winIP:7890 && export https_proxy=$http_proxy
3个月前 评论
forfaye (楼主) 3个月前

不要写死hosts里的ip,配置完代理后curl google.com,有反应说明配置成功了

3个月前 评论
forfaye (楼主) 3个月前

上代理,啥配置也不用改,直接 sail up

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!