如何在我的 alpine:3.6 Docker 容器中指定静态(非 DHCP)DNS?

How can I specify a static (not DHCP) DNS in my alpine:3.6 Docker container?

我想在我的家庭 LAN 上执行一个 Docker 容器,但我不希望它访问我 LAN 上的任何内容。

根据 Stack Overflow 问题 Disable access to LAN from docker container 的答案,我在将 运行 容器的机器上完成了以下操作:

sudo iptables -A INPUT -i docker0 -d 192.168.0.0/16 -j DROP
sudo iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -j DROP
sudo iptables -I FORWARD -i docker0 -d 192.168.0.0/16 \
    -m state --state ESTABLISHED,RELATED -j ACCEPT

这行得通。 Docker 我机器上的容器看不到我的局域网,但它们可以访问互联网。

不幸的是,他们以某种方式从我的 LAN 的 DHCP 获取 DNS 设置,而指定我的 DHCP 的 DNS 在我的 LAN 上。所以现在他们无法解析主机名。

如何将 DNS 设置覆盖到外部 DNS(例如:8.8.8.8)?对于单个容器会很好,但对于所有 Docker 个容器,在这台机器上 运行ning 会更好。

我的 Docker 图片基于 alpine:3.6,以防万一,我使用的是 Docker 版本 18.09.2.

正如 Danila Kiver 指出的那样,docker run--dns=8.8.8.8 选项可用于为 Docker 图像的单个 运行 设置 DNS .

如果您需要在本地覆盖 所有 Docker 容器 运行 的默认 DNS,包括构建期间的容器,则可以将 DNS 选项添加到/etc/docker/daemon.json。例如:

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "dns-search": ["your.search.domain.example.com"]
}