3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[wsl / Docker] host解決に失敗するnetwork error問題の対処

Last updated at Posted at 2023-01-06

1. 状況

以下のような場合に、この記事の方法で解決できる場合がある。

  1. wsl内でのbuild時にdockerイメージの取得に失敗する
    docker compose buildの最初に、dockerイメージのダウンロード処理が走るが、その時点でエラーが発生してしまう。
  2. wsl内で apt install <module> を記載した Dockerfile の build に失敗する
  3. wsl内で、 git clone ができない

2. 開発環境

windowsPC上でwslを立ち上げ、wslマシンの中でgit clonedocker compose buildなどを行っている。

3. 詳しい症状

3-1. docker compose build 実行時に docker image の取得に失敗

$ docker compose build
[+] Building 0.1s (4/4) FINISHED                                                                                    
 => [internal] load build definition from Dockerfile                                                           0.0s
 => => transferring dockerfile: 2.18kB                                                                         0.0s
 => [internal] load .dockerignore                                                                              0.0s
 => => transferring context: 2B                                                                                0.0s
 => ERROR [internal] load metadata for docker.io/library/python:3.9.10                                         0.0s
 => CANCELED [internal] load metadata for docker.io/library/node:18.12.1-buster-slim                           0.0s
------
 > [internal] load metadata for docker.io/library/python:3.9.10:
------
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://registry-1.docker.io/v2/library/python/manifests/3.9.10": dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:34604->[::1]:53: read: connection refused

failed to solve: rpc errorなどというエラーが表示される。

3-2. apt install に失敗

docker-compose buildで、docker imageをビルドしようとしたところ、
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'

3-3. git clone実行時

$ git clone https://github.com/siruku6/py_web_docker_template.git
Cloning into 'py_web_docker_template'...
fatal: unable to access 'https://github.com/siruku6/py_web_docker_template.git/': Could not resolve host: github.com

Could not resolve host: github.comというエラーが表示され、github.comにアクセスできていないことが分かる。

4対処法

4-1. WSL 側の network 問題の解決

4-1-1. /etc/resolv.conf 作成

/etc/resolv.confに問題があるので、それを作成ないし修正することで解決する。

ファイル内を以下の2行だけにすると良いようだ。

/etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

4-1-2. /etc/wsl.conf 作成

これで、 /etc/resolv.conf が上書きされてしまうことを防ぐ。

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

これがないと、wsl 再起動する度に、自動的に /etc/resolv.conf が上書きされてしまうらしい。

4-1-3. /etc/resolv.conf が削除されないように

ここまでの対策だけだと、 /etc/resolv.conf が毎回削除されてしまう。
その対策が以下の記事に掲載されていた。

$ sudo chattr +i /etc/resolv.conf

こうしておくと、 wsl を再起動しても /etc/resolv.conf が削除されなくて済む。

4-2. docker hub の認証を有効化

git clone のエラーの場合は関係ないが、 docker build などでエラーが出た時は、こちらが原因の可能性もある。

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yourname
Password: 
Login Succeeded

これで build が通ったりもした。

5. 関連記事

wsl ネットワークエラーの解決策は以下のgithub issueから見つけた。

もう少し詳しい情報が以下の記事で解説されていた(2023/05/04追記)

docker の認証切れに関してはこちらに記載あり。

/etc/resolv.conf が削除される問題についてはこちらの記事に記載がありました。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?