wsl2にインストールしたDockerのコンテナ内でネットワークエラーが発生する場合の対処法
wsl2のUbuntuにインストールしたDockerのコンテナ内で、ネットワークエラーが発生したことがありましたので、対処法を紹介します。
現象
以下のベースイメージをビルドしたものを起動して。.NET6のASP.NET/C#の開発環境を構築していたときに、パッケージをダウンロードする際にエラーになってしまいました。
- mcr.microsoft.com/dotnet/sdk:6.0-focal
具体的には、dotnet restoreコマンドで、パッケージをダウンロードする際に、Could not resolve host ...というエラーになりました。
また、Visual Studio Code(VSCode)のC#の拡張機能でOmniSharpを内部的にダウンロードしている処理もエラーになっていました。
正常に接続できているURLもあったので、よくわからない状態でした。
対処法
DNSルックアップに失敗しているのが原因のようなので、DNSサーバーの設定を変更します。
wslの環境の/etc/dockerのパスにdaemon.jsonというファイル名のファイルを作成します。
ファイルの中身は以下のように設定します。(8.8.8.8はDNSサーバーにGoogle Public DNSを使用する場合の例です)
daemon.json{
"dns": ["8.8.8.8"]
}以下のコマンドでdockerを再起動します。
$ sudo service docker restartこれでDockerコンテナ内でのCould not resolve host ...というエラーは解消されました。
Dockerのネットワーク設定についての記事はネット上にたくさんありましたが、ネットワーク関連の知識がないと、理解するのが難しい内容が多く、上記の対処法にたどり着くまでに時間がかかりました。
やはりDockerを使いこなすにはネットワーク関連の勉強もしないと駄目ですね。。