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

时间:2019-03-30 06:57:02

标签: docker dns alpine dhcp

我想在我的家庭局域网中执行一个Docker容器,但我不希望它可以访问我的局域网中的任何东西。

基于对堆栈溢出问题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容器看不到我的局域网,但它们可以访问Internet。

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

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

如果有必要,我的Docker映像基于alpine:3.6,并且我使用的是Docker版本18.09.2。

1 个答案:

答案 0 :(得分:0)

Danila Kiver指出,--dns=8.8.8.8的{​​{1}}选项可用于为单独运行的Docker映像设置DNS。

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

/etc/docker/daemon.json