Docker

【Docker/Python】”NewConnectionError~”でpipに失敗したときの解決法

さて、Dockerコンテナ環境でpip installを実行したところ、以下のようなエラーが返ってきました。
結論としては名前解決の失敗が原因だったので、/etc/resolv.confにnameserver 8.8.8.8を追記して解消しました。

今回発生したエラーは以下のとおりです。

root@7a0da619dbb1:~# pip install --no-cache-dir requests
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None))
after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7ff1b9635b90>:
Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/requests/

上記のエラーですが、調べたところ名前解決の失敗によって発生するエラーだということがわかりました。
どうやらDockerコンテナの/etc/resolv.confはホストOSのものを継承するようで、その宛先にコンテナからはアクセスできないことが原因でした。

僕のDockerはWSL2上に構築していたのですが、そもそもWSLの/etc/resolv.confは、Windows側によって自動生成される設定になっていました。
そのため、コンテナではなく、ホストの/etc/resolv.confにnameserver 8.8.8.8を以下のように追記したことで、問題が解消されました。

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.17.64.1
nameserver 8.8.8.8

最近はトラブルシューティングのスピードも上がってきたような気がします。
そのうちトラシューのノウハウなんかも文章化してまとめたいなぁ。

それではまた。

COMMENT

メールアドレスが公開されることはありません。