[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 就可以解决,但在我的环境中,它们并没有起到作用(´;ω;`)ブワッ