几天前,WSL2(Ubuntu 20.04),我安装了docker compose并创建了一个docker-compose.yml,它基于postgres:12镜像构建数据库。我第一次运行它时,一切都很正常。
几天后,当我再次运行docker compose时,构建没有成功。Docker 无法访问互联网来拉取 postgres 镜像,连接被拒绝. 以下是其中的内容:
$ docker compose up -d
[+] Running 1/0
! database Warning
[+] Building 0.0s (3/3) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 290B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> ERROR [internal] load metadata for docker.io/library/postgres:12-alpine
------
> [internal] load metadata for docker.io/library/postgres:12-alpine:
------
failed to solve: postgres:12-alpine: failed to do request: Head "https://registry-1.docker.io/v2/library/postgres/manifests/12-alpine": dial tcp: lookup registry-1.docker.io on 172.18.0.1:53: read udp 172.18.0.1:51217->172.18.0.1:53: read: connection refused
因此,我尝试或检查了 WSL 中是否仍可以访问互联网,sudo apt-get update
但ping google.com
没有……事实上,从那天起,我就无法在 WSL 中再访问互联网了。
$ ping www.google.com
ping: www.google.com: Temporary failure in name resolution
我已尝试过:
- 我尝试进入
/etc/resolve.conf
并修改名称服务器地址,通过输入 google DNS,8.8.8.8
而不是默认地址。resolve.conf 内容:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateR.esolvConf = false
nameserver 8.8.8.8
我甚至创建了一个wsl.conf
来保留nameserver 8.8.8.8
。之后,我的问题解决了几分钟,但一切又崩溃了。
- 如果我在 中更改名称服务器,docker 错误会有所不同
resolve.conf
。使用默认名称服务器,如果我想在 docker 中拉取 postgres 映像,我有一个连接被拒绝(就像使用docker compose一样):
$ docker pull postgres
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 172.18.0.1:53: read udp 172.18.0.1:57439->172.18.0.1:53: read: connection refused
并且nameserver 8.8.8.8
,我有一个暂停来自docker的错误:
$ docker pull postgres
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 8.8.8.8:53: read udp 172.18.7.177:46999->8.8.8.8:53: i/o timeout
- 但奇怪的是,如果我重启电脑,然后运行 WSL,我就会有一个短暂的互联网连接,大约需要 2 分钟,(如果我做一个
sudo apt-get update
,它就会起作用),然后它最终会失去所有连接。
我认为 docker 或 docker compose 一定在我的 WSL 网络中造成了冲突,可能是 IP 地址已被其他程序使用,但我无法解释原因。这是我的 Docker 和 Docker compose 版本。
Docker version 23.0.3, build 3e7cbfd
Docker Compose version v2.17.2
谢谢您的帮助,说实话我不知道该怎么办。