我想在我的 Ubuntu 服务器 (23.04) 上运行 AdGuard Home 并将路由器指向服务器以阻止网络上的广告等。但是,我遇到了有关端口的各种问题。具体来说,端口 53、67 和 68。
这是docker-compose.yml
我写的(但是,我使用podman
而不是docker
):
version: "3.4"
services:
adguardhome:
image: "adguard/adguardhome"
container_name: "adguardhome"
restart: "unless-stopped"
cap_add:
- NET_ADMIN
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "68:68/udp"
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
- "3000:3000/tcp"
- "853:853/tcp"
- "853:853/udp"
- "784:784/udp"
- "8853:8853/udp"
- "5443:5443/tcp"
- "5443:5443/udp"
volumes:
- "./work:/opt/adguardhome/work"
- "./conf:/opt/adguardhome/conf"
我运行了该命令sudo podman-compose up -d
,但它抱怨端口 53 被绑定。所以我做了下面的步骤。
我尝试过的:
遵循官方 Docker Hub 的说明为了
systemd-resolved
。- 做
sudo lsof -i :53
显示systemd-resolved
不再占用端口,但libvirt-dnsmasq
确实占用了。
- 做
sudo virsh net-edit default
通过运行并添加行来编辑配置<dns enable=no />
。sudo lsof -i :53
不返回任何东西;也不sudo netstat -tuln | grep 53
。- 重新运行命令
sudo podman-compose up -d
;它抱怨端口 67 被绑定。
运行
sudo lsof -i :67
显示libvirt-dnsmasq
端口仍然被占用。- 我在网上找不到任何有关如何禁用它的有用资源。由于大多数资源都很旧,信息已经过时(许多被告知要编辑的文件根本不存在等),所以我只是求助于
sudo kill <pid>
- 重新运行命令
sudo podman-compose up -d
;它抱怨端口 68 被绑定。我检查 usinglsof
和ps aux | grep <pid>
,发现systemd-networkd
正在使用它。
- 我在网上找不到任何有关如何禁用它的有用资源。由于大多数资源都很旧,信息已经过时(许多被告知要编辑的文件根本不存在等),所以我只是求助于
添加
network_mode: host
到该docker-compose
文件会产生以下结果:
['podman', '--version', '']
using podman version: 4.3.1
** excluding: set()
['podman', 'network', 'exists', 'adguardhome_default']
['podman', 'network', 'create', '--label', 'io.podman.compose.project=adguardhome', '--label', 'com.docker.compose.project=adguardhome', 'adguardhome_default']
['podman', 'network', 'exists', 'adguardhome_default']
podman run --name=adguardhome -d --label io.podman.compose.config-hash=123 --label io.podman.compose.project=adguardhome --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=adguardhome --label com.docker.compose.project.working_dir=/home/tester/containers/adguardhome --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=adguardhome --network host --cap-add NET_ADMIN -v /home/tester/containers/adguardhome/work:/opt/adguardhome/work -v /home/tester/containers/adguardhome/conf:/opt/adguardhome/conf --net adguardhome_default --network-alias adguardhome -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp -p 853:853/tcp -p 853:853/udp -p 784:784/udp -p 8853:8853/udp -p 5443:5443/tcp -p 5443:5443/udp --restart unless-stopped adguard/adguardhome
Error: cannot set multiple networks without bridge network mode, selected mode host: invalid argument
exit code: 125
podman start adguardhome
Error: no container with name or ID "adguardhome" found: no such container
exit code: 125
我不知所措。我真的不知道该怎么办,也不知道为什么事情会这样;当然,我不能仅仅为了让 AGH 工作而禁用系统上的所有内容。
- 如果
network_mode: host
有效的话,我的用例会有什么缺点吗(除了无法从其他容器访问该容器之外)? - 我注意到
127.0.0.1:
在端口前面添加不会引起任何问题 - 这是一个可行的解决方案吗?这有什么缺点吗?