之前因为 Pi-Hole 在家庭网络里的重要地位,甚至导致家庭控制器的 Ubuntu 系统升级推迟了一年。毕竟从 20.04 升级到 22.04 需要大量的重新配置工作。所以,把 Pi-Hole 移到 Docker 里面便成为一个必要的步骤。
之前尝试将设置导出,并且直接创建 Pi-Hole 容器,直接使用导出的设置。但是结果是 FTL 崩溃,不管是 bridge 网络还是 host 网络均以 FTL 崩溃告终。
后来发现,如果把 DHCP 关掉,只用 DNS 部分是没问题的。再进一步,终于找到了解决办法。
1. 清理 DHCP 的 IP 分配租约
IP 租约数据库是放在容器内路径 /etc/pihole/pihole-FTL.db
。所以我们只要删了主机端映射目录下的文件就好。
rm /docker/pihole/etc-pihole/pihole-FTL.db
2. (可选)将主机端的 cloudflared 上游解析绑定到所有 IPv4 地址
这个通过向 /etc/cloudflared/config.yml
中加入以下一行即可实现。
proxy-dns-address: 0.0.0.0
3. 确保使用 host 网络并加入 NET_ADMIN 权限
具体 docker 命令可以参考以下示例。
sudo docker run -d \
--name pihole \
-v "/docker/pihole/etc-pihole:/etc/pihole" \
-v "/docker/pihole/etc-dnsmasq.d:/etc/dnsmasq.d" \
-v "/docker/pihole/log:/var/log/pihole" \
--restart=unless-stopped \
-e DNSMASQ_USER=root \
-e FTLCONF_LOCAL_IPV4=192.168.1.1 \
-e TZ="America/Toronto" \
-e WEBPASSWORD="admin" \
-e DNSMASQ_LISTENING=all \
-e WEB_PORT=8080 \
--cap-add=NET_ADMIN \
--net=host \
pihole/pihole:latest
4. 关掉 DHCPv6 支持
浏览器访问 Pi-Hole 管理界面,在左面导航栏点击“settings”,然后右侧上面选择“DHCP”选项卡,在右面的“Advanced DHCP settings”中,将“Enable IPv6 Support (SLAAC+RA)”一项关掉,拉到页面底部点“save”即可。
5. 有问题,查日志
日志在容器中的 /var/log/pihole
路径下,对应主机端的文件就是
tail /docker/pihole/log/FTL.log