我想在我的家庭局域网中执行一个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。
答案 0 :(得分:0)
Danila Kiver指出,--dns=8.8.8.8
的{{1}}选项可用于为单独运行的Docker映像设置DNS。
如果您需要覆盖在本地运行的 all 所有Docker容器的默认DNS,包括在构建期间的容器,则可以将DNS选项添加到docker run
。例如:
/etc/docker/daemon.json