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

问题描述 投票:-1回答:1

我想在家庭局域网上执行Docker容器,但我不希望它能够访问我的局域网上的任何东西。

根据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容器无法看到我的局域网,但是它们可以到达互联网。

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

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

我的Docker图像基于alpine:3.6,如果它很重要,我使用的是Docker版本18.09.2。

docker dns alpine dhcp
1个回答
0
投票

正如Danila Kiver指出的那样,--dns=8.8.8.8docker run选项可用于为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"]
}
© www.soinside.com 2019 - 2024. All rights reserved.