前言
最近在学习larave9.x(中文文档),
其中有一个Sail开发环境,是一套基于Docker的开发环境,
因为已经在WSL安装过Docker,所以就直接使用这个进行学习
按照文档上的步骤执行:
- 安装依赖
composer require laravel/sail --dev
- 发布
Sail的docker-compose.yml文件到你应用程序的根目录
php artisan sail:install
- 启动
Sail的服务
./vendor/bin/sail up
在这个步骤会爆出类似下面的异常:
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease
然后会部署失败.
解决
最先想到的是替换为国内源
于是在Dockerfile中添加命令替换为阿里云镜像:
RUN sed -i -r 's#http://(archive|security).ubuntu.com#https://mirrors.aliyun.com#g' /etc/apt/sources.list && apt-get update
Dockerfile文件的位置可以在上面提到的docker-compose.yml中查看:
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.1/app
但是并没有起作用
进而想到可能是dns问题
于是在Dockerfile中添加替换dns配置语句:
RUN echo "nameserver 8.8.8.8" > /etc/resolv.conf && echo "nameserver 8.8.4.4" >> /etc/resolv.conf
但是并没有起作用
查看容器中原来的/etc/resolv.conf文件
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.23.9.144
其中dns的ip是windows的ip
✔ 修改wsl的/etc/resolv.conf:
nameserver 8.8.8.8
nameserver 8.8.4.4
Docker容器会继承宿主机也就是wsl中的/etc/resolv.conf
在重新进行部署,成功
这里试过在/etc/wsl.conf添加
[network]
generateResolvConf = false
重启wsl后就没有/etc/resolv.conf...