如何从docker-compose文件

时间:2017-10-31 17:43:14

标签: java docker dns network-programming docker-compose

我正在使用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

1 个答案:

答案 0 :(得分:5)

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

用户定义的网络和DNS

默认情况下,Docker组成v2+创建用户定义网络的定义。

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

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

Docker DNS

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

由于您的示例配置仅为一个应用容器设置DNS,因此应该没问题,但在应用之前应该make sure the DNS container is up and healthy