我正在使用docker compose命令来创建和启动容器。
我的docker版本 docker --version Docker version 17.09.0-ce, build afdb6d4
我的docker撰写版本 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) 我试着用命令来做这件事,它似乎工作,但我需要从撰写文件 docker run -p 4000:53 --dns=8.8.8.8 cloud.mycompany.com:5000/server-0:latest
4) 理想情况下,我希望它具有容器“fakedns”的ip地址,以便它使用这个地址而不是嵌入的地址@127.0.0.11
1条答案
按热度按时间inb24sb21#
您不会在中看到自定义dns服务器
/etc/resolv.conf
但docker的解析程序会将dns请求转发给他们。用户定义的网络和dns
docker编写v2+定义默认情况下创建用户定义的网络。
具有用户定义网络的docker使用嵌入式dns服务器,以便docker可以响应本地容器请求(服务发现)。
对于docker无法解析的任何dns主机,请求将被转发到dns服务器上。这是系统默认服务器,即在中配置的服务器
dockerd
或在运行时为容器配置的dns服务器。docker dns
使用内部dns服务器时要小心。docker守护进程中的内容将中断如果您将系统dns指向容器当您创建鸡或蛋问题时,docker需要启动dns但无法启动容器来提供dns。
由于您的示例配置仅为一个应用程序容器设置dns,因此应该可以,但在应用程序启动之前,请确保dns容器正常运行。