我正在使用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容器是正常的。