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