Как Docker реализует сервер DNS-имен?

#docker #networking #dns

Вопрос:

Я пытаюсь собрать воедино, как Docker управляет DNS и сетями между своими контейнерами.

У меня есть следующие контейнеры, работающие в той же сети Docker. Я на Mac OS, так что они работают на виртуальной машине Linux (через docker-machine ).

Я также включил IP nameserver -адрес, используемый для DNS, как определено в локальном /etc/resolv.conf

 
 ------------     ------------     ------------ 
|   rails    |   |  postgres  |   |   redis    |
|            |   |            |   |            |
| 127.0.0.11 |   | 127.0.0.11 |   | 127.0.0.11 |
 ------------     ------------     ------------ 
                       |
                       ↓
 ---------------------------------------------- 
|          Linux VM (docker-machine)           |
|             nameserver 10.0.2.3              |
 ---------------------------------------------- 
                       |
                       ↓
 ---------------------------------------------- 
|                     OSX                      |
|           nameserver 192.168.203.3           |
 ---------------------------------------------- 
 

Насколько я понимаю, Docker определяет /etc/resolv.conf с nameserver помощью параметра, который будет использоваться для разрешения DNS. Он также выполняет это nameserver и вернет адрес на основе имени контейнера (если он найден). Таким образом, мой rails контейнер видит два других контейнера с именами хостов postgres и redis .

  1. Где работает этот DNS — сервер? Могу ли я где-нибудь увидеть этот процесс запущенным? Выполняется ли он в docker-machine качестве другого контейнерного процесса, который я не вижу?
  2. Как Docker реализует этот DNS-сервер? Использует ли он bind ? Или в другой библиотеке?
  3. Если DNS-сервер работает на docker-machine ( 10.0.2.3 ), как он раскрывает себя 127.x.x.x для каждого отдельного контейнера?

Любое другое понимание того, как это работает, было бы очень ценно.

Спасибо!

Ответ №1:

Это часть ядра. Вы не можете рассматривать это как процесс операционной системы.

Кроме того, есть хорошее объяснение того, как это работает с различными сетевыми конфигурациями