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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在alpine:3.6 Docker容器中指定静态(非DHCP)DNS?相关的知识,希望对你有一定的参考价值。

我想在家庭局域网上执行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。

答案

正如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"]
}

以上是关于如何在alpine:3.6 Docker容器中指定静态(非DHCP)DNS?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Alpine Docker 容器中运行 Bash 脚本?

如何在 Docker 中的 Alpine 上运行 Apache 2?

使用“exit”后如何保留docker alpine容器?

如何在 docker compose 版本 3 中指定内存和 CPU 限制

「容器架构」Debian和 Alpine作为基准Docker映像的对比

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)