Pi-hole で "DNS resolution is currently unavailable" のエラーが出るときの対処法
家中丸ごと広告ブロックしてくれる Pi-holeを、自宅のRaspberry Pi 3 に docker コンテナとして運用しています。
広告リストを更新しようとすると、あるときこのようなエラーが出ました。
[✗] DNS resolution is currently unavailable [✗] DNS resolution is not available
DNS解決が出来ないとのエラー。 最初は、何か設定を間違えのだと思って再インストールしてみたものの、解決せず。
解決策
結論からいうと、このときの原因は、/etc/resolv.conf
に書いてある内容が間違っていたことでした。
これは、ネットワークの名前解決に使われるファイルです。中には、ホスト名 (google.com yahoo.co.jp のようなもの) と、IPアドレスとの対応が書かれています。
問題のあった環境では、その中身を見てみると、以下のようになっていました。
nameserver 127.0.0.11 options ndots:0
nameserver 127.0.0.11
の部分のせいで、外部との通信ができなくなっているようです。そこで、
nameserver 127.0.0.1 options ndots:0
に書き換えて、docker-compose.yml
のあるフォルダーに resolv.conf
という名前で保存します。
docker-compose.yml
に以下の一行を追記します。
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- 53:53/tcp
- 53:53/udp
- 67:67/udp
- 8100:80/tcp
environment:
TZ: Asia/Tokyo
PIHOLE_DNS_: 1.1.1.1;1.0.0.1
FTLCONF_REPLY_ADDR4: 192.168.0.82
volumes:
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
+ - ./resolv.conf:/etc/resolv.conf
cap_add:
- NET_ADMIN # Recommended but not required (DHCP needs NET_ADMIN)
restart: unless-stopped
その後 docker コンテナを再起動します。
docker compose -f ~/docker/pihole/docker-compose.yml down docker compose -f ~/docker/pihole/docker-compose.yml up -d
これで、広告リストの更新ができるようになっているはずです。
resolv.conf の中身を確認する方法
"pihole" の部分には、docker-compose.yml の container に指定したコンテナの名前を入れます。お使いの環境に合わせてください。
# コンテナの中に入る。 sudo docker exec -it pihole /bin/bash # resolv.conf の中身を表示する cat /etc/resolv.conf
参考にしたページ:
https://discourse.pi-hole.net/t/solved-dns-resolution-is-currently-unavailable/33725/7