in Cloud, Kubernetes

Docker下载镜像返回`server misbehaving`的错误

小结

安装了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,似乎是正确的方向。

参考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

解决办法是在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

Write a Comment

Comment