Ubuntu 22.04.3 LTS上Docker部署Pi-hole引发网络异常及端口冲突问题的解决咨询
Ubuntu 22.04.3 LTS上Docker部署Pi-hole引发网络异常及端口冲突问题的解决咨询
看起来你遇到的核心问题是systemd-resolved和Pi-hole的53端口冲突,加上容器内DNS配置导致的解析循环,我来一步步帮你理清并解决:
先复盘你的问题根源
- 容器内DNS循环问题:你最初运行命令里加的
--dns=127.0.0.1确实是坑——Pi-hole本身就是DNS服务器,容器把DNS指向自己的127.0.0.1,会导致DNS请求反复在容器内打转,这正是你网络慢到离谱的直接原因。 - systemd-resolved禁用后的网络紊乱:Ubuntu 22.04默认用systemd-resolved做DNS解析服务,直接禁用它会破坏系统默认的DNS配置链。哪怕之后重新启用,也可能因为端口抢占失败(比如Pi-hole还占着53)或者配置文件没恢复,导致网络一直异常。
最优解决方案:不用禁用systemd-resolved,避开端口冲突
我们只需要修改systemd-resolved的配置,让它放弃监听53端口,这样Pi-hole可以正常使用53,系统DNS服务也能正常运行:
- 编辑systemd-resolved的配置文件:
sudo nano /etc/systemd/resolved.conf - 找到
DNSStubListener这一行,去掉注释并改成:DNSStubListener=no - 保存退出后,重启systemd-resolved服务:
此时53端口就空出来给Pi-hole用了,系统DNS服务也不会受影响。sudo systemctl restart systemd-resolved.service
修正Pi-hole的运行命令
去掉导致循环的--dns=127.0.0.1,同时确保ServerIP填你的主机真实IP(不是容器IP),调整后的完整命令:
docker run -d --name pihole-cont \ -p 53:53/tcp -p 53:53/udp \ -p 67:67/udp \ -p 80:80 -p 443:443 \ -v "${DOCKER_CONFIGS}/dnsmasq.d/:/etc/dnsmasq.d/" \ -e ServerIP=[你的主机IP地址] \ --restart=unless-stopped \ --cap-add=NET_ADMIN \ --dns=1.1.1.1 \ pihole/pihole:latest
快速恢复当前异常网络的方法
不用粗暴清理所有容器镜像,按下面步骤操作就能恢复:
- 先停止Pi-hole容器:
docker stop pihole-cont - 按前面的步骤修改
/etc/systemd/resolved.conf,重启systemd-resolved服务:sudo systemctl restart systemd-resolved.service - 检查系统DNS配置文件是否正常:
正常情况下/etc/resolv.conf应该是软链接到/run/systemd/resolve/stub-resolv.conf,如果不是,重新创建链接:
这样你的网络就能立刻恢复正常。sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
补充:Pi-hole登录密码的获取/重置
你提到不知道登录密码,可以用这个命令查看容器初始密码:
docker logs pihole-cont | grep "password"
或者直接重置成你想要的密码:
docker exec -it pihole-cont pihole -a -p
备注:内容来源于stack exchange,提问作者SO_32
相关产品推荐
相关产品推荐

