小结
安装了Docker的Windows桌面环境,机器重启后下载镜像返回server misbehaving
的错误,修改配置,成功解决。
问题
安装了Docker的Windows桌面环境,在WSL(Windows Subsystem for Linux)下载各种镜像没有任何问题,但是在机器重启后碰到以下问题不能下载镜像的问题,这是在编译的的时候需要下载docker.io/library/openjdk:latest
这个镜像。如果是直接下载镜像也会碰到同样的问题,机器重启之前没有做任何改动。
john@LAPTOP-XXYYZZ:~$ docker build -t test_application /mnt/c/John/test_application/
[+] Building 8.1s (3/3) FINISHED docker:default
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 174B 0.0s
=> ERROR [internal] load metadata for docker.io/library/openjdk:latest 8.0s
------
> [internal] load metadata for docker.io/library/openjdk:latest:
------
Dockerfile:1
--------------------
1 | >>> FROM openjdk:latest
2 | ADD test_application-0.0.1.jar test_application-0.0.1.jar
3 | EXPOSE 8080
--------------------
ERROR: failed to solve: openjdk:latest: failed to do request: Head "https://registry-1.docker.io/v2/library/openjdk/manifests/latest": dial tcp: lookup registry-1.docker.io on 192.168.65.254:53: server misbehaving
解决
网上提供了一些解决办法,例如重新安装同样版本的Docker应用,这是一个比较笨的办法,不推荐使用。
有解决办法是将DNS服务器设置成8.8.8.8
,似乎是正确的方向。
解决办法是在Docker安装的机器上修改resolv.conf
sudo vi /etc/resolv.conf
但是我的情况是WSL(Windows Subsystem for Linux)
的Ubuntu,并且使用Docker Desktop(Docker的桌面环境),完全不一样。
我的做法是,在Docker Desktop
中, 点Setting
-> Docker Engine
,修改以下:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
}
}
修改为以下,也就是添加了8.8.8.8
的DNS的服务器地址:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"dns": [
"8.8.8.8",
"8.8.4.4"
],
"experimental": false,
"features": {
"buildkit": true
}
}
到此问题解决!
参考
Stackoverflow: Docker for windows: “server misbehaving” when trying to pull
Github: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: server misbehaving #1317