[wsl2 / Ubuntu] 对于无法执行apt install的问题的解决方案是什么?

前提 – 前提条件

這是關於在WSL環境中使用Docker的情節。

症状
– 症状

在使用docker-compose build命令构建docker镜像时,出现了以下错误:
在Dockerfile的apt install部分发生了错误。

Err:1 http://deb.debian.org/debian buster InRelease
  Temporary failure resolving 'deb.debian.org'
Err:2 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'

如果你正在使用alpine镜像

在Dockerfile中的apk add命令处发生了以下错误。

Step 2/8 : RUN apk add --no-cache libstdc++ libgcc     bash vim     && pip install --upgrade pip
 ---> Running in b328299760c6
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.14/main: temporary error (try again later)
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.14/community: temporary error (try again later)
ERROR: unable to select packages:
  bash (no such package):
    required by: world[bash]
...(以下略)

对策

目前这个措施效果还不错。

在执行docker-compose build的环境中,首先编辑或创建以下两个文件。

文件的编辑和创建

/etc/resolv.conf
nameserver 8.8.8.8

/etc/wsl.conf
[network]
generateResolvConf = false

/etc/resolv.conf是一个文件,其中包含了DNS服务器的信息。其中的nameserver 8.8.8.8表示使用Google的DNS服务器。

/etc/wsl.conf是另一个文件,它在[network]部分设置了generateResolvConf=false,意味着不会自动生成resolv.conf文件。

据说这样一来,可以防止每次启动wsl时都会创建/etc/resolv.conf文件。

wsl重新启动

这次,从环境外部,也就是主机PC的操作系统重新启动WSL。
我是从PowerShell中执行的。

> wsl --shutdown
> wsl -d Ubuntu

暂时来说,现在总算勉强能够运作了。

弥补

有些文章写道只需运行 wsl –shutdown 或 apt-get update 就可以解决,但在我的环境中,它们并没有起到作用(´;ω;`)ブワッ