我需要一个在主机网络中可见的 Docker 容器,它有自己的 ip、mac 和主机名,并通过 avahi 进行宣传。(我想使用线荚无需更改主机上的主机名和其他内容)
我为此创建了一个 Docker 网络,如下所示:
networks:
wirepod_net:
driver: macvlan
driver_opts:
parent: "enp4s0"
ipam:
config:
- subnet: "192.168.10.0/24"
gateway: "192.168.10.1"
并给容器一个相应的ip和mac地址
mac_address: "9C:EE:7D:1A:0F:E8"
networks:
wirepod_net:
ipv4_address: "192.168.10.11"
这工作得很好并且正如我所希望的那样。
但是我最近在我的主机上安装了 tailscale,并且只要 tailscale 运行,容器就无法访问互联网。
我为此在 Google 上搜索了一段时间,但每个与我的问题相近的问题都只想启用主机 <-> 容器通信。我尝试了这种方法,因为我认为也许这毕竟是同一个问题。但遗憾的是,这并没有帮助我解决“容器无法访问互联网”的问题。(或者我做错了;我不能排除这种可能性……)
这个问题有点超出我的理解范围,因此我很感激得到的每一份帮助。
我仔细阅读并关注了以下帖子:
- https://forum.tailscale.com/t/problem-with-tailscale-subnet-and-container-in-a-macvlan-network/1565据我了解,这主要通过 tailscale 访问 macvlan 容器。
- https://stackoverflow.com/questions/42083546/docker-macvlan-network-unable-to-access-internet 不适用,因为只有使用 tailscale 时互联网才能正常工作,但问题仍然存在。
答案1
所以我发现问题不是互联网连接本身,
而是 DNS 解析。
我通过在 Docker 容器上明确设置 DNS 服务器来解决这个问题
dns:
- 1.1.1.1
- 1.0.0.1
服务水平部分。
这解决了我遇到的问题。