为了在 Ubuntu 22.04.3 LTS 上的容器中使用 pi-hole,我首先下载
docker pull pihole/pihole
然后我释放一些端口
sudo systemctl disable systemd-resolved.service && sudo systemctl stop systemd-resolved.service
然后,运行它,
docker run -d --name pihole-cont -it -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=[my IP address] --restart=unless-stopped --cap-add=NET_ADMIN --dns=127.0.0.1 --dns=1.1.1.1 pihole/pihole:latest"
当我打开浏览器并输入
http://[docker's IP address]/admin
我确实进入了 pi-hole 登录页面,即使我不知道密码(我认为这是正常的),但是连接变得无法使用。浏览互联网变得不可能,网站确实开始加载,但需要很长时间,视频不会早于至少五分钟开始,这是我的耐心范围。我也在虚拟机中成功安装了pi-hole,结果相同。我认为问题可能是一个永无休止的循环:我的计算机发出请求,它通过 DNS 服务器,DNS 服务器在我的电脑上虚拟化,因此它向我的电脑发出请求,依此类推,即使它们有不同的IP。这很相似,不同的IP,无法使用的互联网。
我的猜测是正确还是错误?难道我做错了什么?是否有可能将pi-hole容器化,以便真正可以访问互联网?
先感谢您
编辑:因此,删除--dns=127.0.0.1
会发出警告
WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers
离开。然而,简单地禁用systemd-resolved.service
无论如何都会破坏我的互联网。如果我的docker stop [pi-hole ID]
互联网仍然中断,即使我systemd-resolved.service
再次启用。后者给出端口冲突警告。为了恢复我的互联网连接,我清除了所有图像和容器
docker system prune -a -f --volumes
(非常激烈但很快),重新启动systemd-resolved.service
,我终于可以编辑这个问题了。
所以问题似乎是我禁用了systemd-resolved.service
与容器有端口冲突的。我该如何解决?
再次感谢你
使用起来更方便
docker-compose
Docker-compose 允许您将所有参数保存在一个文件中并以普通用户身份运行容器(而不是 as
root
,不需要sudo
)。确保 docker-compose 已安装:
创建一个用于存放配置文件的文件夹:
请注意,
$USER
将替换为您的用户名。然后创建
docker-compose.yml
文件:随着文件的内容:
请确保更改上述文本中的时区和密码以满足您的需要。上面的行
hostname: pi-hole
决定了您在 Pihole 门户网站中看到的内容。如果您在不同的计算机上有两个或多个 Piholes docker 映像实例,则在各自的文件中对它们进行不同的命名是有意义的docker-compose.yml
。按+后按Ctrl+保存并退出编辑器。SCtrlX
禁用并停止 systemd 解析的服务。你似乎已经做到了这一点。我为其他人保留这个:
取消链接并编辑
resolv.conf
:当文件在 Nano 编辑器中打开时,请确保以下行前面带有 a 被注释掉
#
:按+后按Ctrl+保存并退出编辑器。SCtrlX
在启动 Pi-hole 之前测试 DNS 是否正常工作:
如果它有效,请使用以下命令启动 pi-hole:
这将启动 docker 作为守护进程(选项),并从上面创建的
-d
容器中获取容器的配置。docker-compose.yml
如果一切顺利,您应该能够通过以下方式打开 Pihole 门户网站:
在您最喜欢的网络浏览器(例如 Firefox)上。然后您可以在其设置中设置 Pihole 使用的 DNS 服务器
希望这可以帮助