我正在使用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)容器出现后...当我进入容器时,例如在这种情况下服务器-0,我没有看到更新/etc/resolv.conf文件以使用这些名称服务器。相反,它使用docker的嵌入式dns,即127.0.0.11
2)如何确保它使用我在docker-compose使用的文件中指定的内容
3)我尝试用命令执行此操作,它似乎可以工作,但我需要从compose-file执行
docker run -p 4000:53 --dns=8.8.8.8 cloud.mycompany.com:5000/server-0:latest
4)理想情况下,我希望它拥有容器'fakedns'的IP地址,以便它使用这个而不是嵌入式的@ 127.0.0.11
答案 0 :(得分:5)
您不会在/etc/resolv.conf
中看到自定义DNS服务器,但Docker的解析器会将DNS请求转发给它们。
默认情况下,Docker组成v2+创建用户定义网络的定义。
具有用户定义网络的Docker使用embedded DNS server,以便Docker可以响应本地容器请求(服务发现)。
对于Docker无法解析的任何DNS主机,请求将被转发到DNS服务器。这可以是系统默认服务器,dockerd
中配置的服务器,也可以是运行时为容器配置的DNS服务器。
使用内部DNS服务器时要小心。如果您在创建鸡蛋或鸡蛋问题时将系统DNS指向容器,Docker守护程序中的内容将会中断,Docker需要DNS启动但无法启动容器来提供DNS。
由于您的示例配置仅为一个应用容器设置DNS,因此应该没问题,但在应用之前应该make sure the DNS container is up and healthy。