如何从Docker compose文件覆盖/etc/resolv.conf中Docker的嵌入式DNS服务器



我正在使用docker compose命令来创建和启动我的容器。

我的Docker版本 docker --version Docker version 17.09.0-ce, build afdb6d4

我的Docker Compose版本 docker-compose --version docker-compose version 1.16.1, build 6d1ac21

我正在使用的.yml文件如下所示:(注意,我只是缩短了它,以便去掉敏感的东西)

---
services:
zookeeper:
image: "zookeeper"
server-1:
cap_add:
- "NET_ADMIN"
server-0:
cap_add:
- "NET_ADMIN"
dns:
- 8.8.8.8
- 9.9.9.9
environment:
SERVER_ID: 0
NETEM_HOSTS: ""
LOSS_VALUES: ""
MAX_RATE_VALUES: ""
DELAY_VALUES: ""
image: "cloud.mycompany.com:5000/server-0:latest"
fakedns:
image: "cloud.mycompany.com:5000/fakedns:latest"
version: "3.3"

然后我开始使用: docker-compose --file compose.yml up -d

我的问题是:

1) 集装箱上来后。。。当我进入一个容器时,例如在本例中的server-0,我没有看到/etc/resolv.conf文件被更新为使用这些名称服务器。相反,它使用docker的嵌入式dns,它是127.0.0.11

2) 我如何确保它使用我在docker compose 使用的文件中指定的内容

3) 我试着用命令来做这件事,它似乎起作用了,但我需要从compose文件开始 docker run -p 4000:53 --dns=8.8.8.8 cloud.mycompany.com:5000/server-0:latest

4) 理想情况下,我希望它有容器"fakedns"的IP地址,这样它就可以使用这个地址,而不是嵌入的地址@127.0.0.11

您不会在/etc/resolv.conf中看到自定义DNS服务器,但Docker的解析器会将DNS请求转发给它们。

用户定义网络和DNS

Docker编写的定义是v2+,默认情况下创建用户定义的网络。

具有用户定义网络的Docker使用嵌入式DNS服务器,以便Docker可以响应本地容器请求(服务发现)。

对于Docker无法解析的任何DNS主机,请求将被转发到DNS服务器上。这是系统默认服务器、在dockerd中配置的服务器或在运行时为容器配置的DNS服务器。

Docker DNS

使用内部DNS服务器时要小心。如果你在创建鸡或蛋时将系统DNS指向容器,Docker守护进程中的东西就会崩溃。问题是,Docker需要DNS来启动,但无法启动容器来提供DNS。

由于您的示例配置仅为一个应用程序容器设置DNS,因此它应该是可以的,但在您的应用程序之前,请确保DNS容器是正常的。

相关内容

  • 没有找到相关文章

最新更新