如何在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.8
的docker 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?
如何在 docker compose 版本 3 中指定内存和 CPU 限制