如何在 Ubuntu Server 上运行 AdGuard Home 的本地实例?

如何在 Ubuntu Server 上运行 AdGuard Home 的本地实例?

我想在我的 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 被绑定。我检查 usinglsofps 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 工作而禁用系统上的所有内容。

  1. 如果network_mode: host有效的话,我的用例会有什么缺点吗(除了无法从其他容器访问该容器之外)?
  2. 我注意到127.0.0.1:在端口前面添加不会引起任何问题 - 这是一个可行的解决方案吗?这有什么缺点吗?

相关内容