Dockerコンテナでapt-getするとエラーになる場合の対処方法(Err:1 http://security.debian.org /debian xxx InRelease)(Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease Temporary failure resolving ‘deb.debian.org’)
Dockerfileのapt-getでエラーになる
dockerで開発していると、昨日まで動作していたのに突然apt-getコマンドでエラーにあることがあります。
こんなエラーです。
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'
Err:3 http://deb.debian.org/debian buster-updates InRelease
Temporary failure resolving 'deb.debian.org'
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease Temporary
対策1:ホスト側のDNS設定を行う
コンテナのDNS設定はホスト側の設定がそのまま利用されます。
そのため、ホスト側のDNS設定を修正することで解決することがあります。
修正するファイル
/etc/resolv.conf
以下の2行を追加します。
nameserver 8.8.8.8
nameserver 8.8.4.4
再度、docker buildコマンドを実行して確認してください。
WSLの注意点
WSLの /etc/resolv.conf はWSLを再起動すると、初期設定に戻ってしまいます。
<初期設定に戻さないようにする手順>
- /etc/wsl.conf を以下の内容で作成する
[network]
generateResolvConf = false
- /etc/resolv.conf を削除する
- /etc/resolv.conf を以下の内容で作成する
nameserver 8.8.8.8
nameserver 8.8.4.4
これでもエラーになる場合は、次の対策2を実行しましょう。
対策2:ホスト側でapt-getコマンドを実行する
このエラーが出た場合の対策を調べた際に、ほとんどがネットワークの問題でDNSの設定を変更すると解決するとありましたが、私の場合はそれでも同じエラーが発生しました。
ダメもとで、ホスト側でapt-get updateコマンドを実行すると解決しました。
$ sudo apt-get update
この後、docker buildコマンドを実行すると無事apt-getコマンドが成功しました。