为了在 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 服务器在我的 PC 上虚拟化,因此它向我的 PC 发出请求,依此类推,即使它们有不同的 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
与容器存在端口冲突的端口。我该如何修复?
再次感谢你
答案1
更易于使用docker-compose
Docker-compose 允许您将所有参数保存在一个文件中,并以普通用户身份运行容器(不是root
,不需要sudo
)。
确保已安装 docker-compose:
sudo apt install docker-compose-plugin
创建一个用于存放配置文件的文件夹:
mkdir /home/$USER/pi-hole
cd /home/$USER/pi-hole
注意,$USER
将被替换为您的用户名。
然后创建docker-compose.yml
文件:
nano docker-compose.yml
文件内容如下:
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
hostname: pi-hole
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "80:80/tcp"
- "443:443/tcp"
environment:
# Change the Time Zone to your area
TZ: ‘America/New_York'
# Change the password to suit your needs
WEBPASSWORD: SecretPassword
# Volumes store your data between container upgrades
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
cap_add:
- NET_ADMIN
restart: unless-stopped
确保你更改时区和密码上面的文本可满足您的需求。hostname: pi-hole
上面的行决定了您在 Pihole Web 门户中看到的内容。如果您在不同的计算机上有两个或更多个 Piholes docker 映像实例,则在相应的文件中对它们进行不同的命名是有意义的docker-compose.yml
。
按+ ,然后按Ctrl+保存并退出编辑器。SCtrlX
禁用并停止 systemd-resolved 服务。您似乎已经这样做了。我将其保留给其他人:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved.service
取消链接并编辑resolv.conf
:
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf
#
当文件在 nano 编辑器中打开时,确保以下行前面被注释掉:
#nameserver 127.0.0.53
按+ ,然后按Ctrl+保存并退出编辑器。SCtrlX
在启动 Pi-hole 之前测试 DNS 是否正常工作:
ping -c4 google.com
如果有效,请使用以下命令启动 pi-hole:
docker compose up -d
这将启动 docker 作为守护进程(选项-d
)并从您上面创建的容器中获取配置docker-compose.yml
。
如果一切顺利,您应该能够通过以下方式打开 Pihole 网络门户:
http://[Your Ubuntu-Pihole computer's IP address]/admin/login.php
在您最喜欢的 Web 浏览器(例如 Firefox)上。然后,您可以在其设置中设置 Pihole 使用的 DNS 服务器
希望这可以帮助