如何处理在WSL2中ubuntu apt update失败问题

278 阅读1分钟

前言

最近在学习larave9.x(中文文档),

其中有一个Sail开发环境,是一套基于Docker的开发环境,

因为已经在WSL安装过Docker,所以就直接使用这个进行学习

按照文档上的步骤执行:

  • 安装依赖
composer require laravel/sail --dev
  • 发布 Saildocker-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...