#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
.
- Где работает этот DNS — сервер? Могу ли я где-нибудь увидеть этот процесс запущенным? Выполняется ли он в
docker-machine
качестве другого контейнерного процесса, который я не вижу? - Как Docker реализует этот DNS-сервер? Использует ли он
bind
? Или в другой библиотеке? - Если DNS-сервер работает на
docker-machine
(10.0.2.3
), как он раскрывает себя127.x.x.x
для каждого отдельного контейнера?
Любое другое понимание того, как это работает, было бы очень ценно.
Спасибо!
Ответ №1:
Это часть ядра. Вы не можете рассматривать это как процесс операционной системы.
Кроме того, есть хорошее объяснение того, как это работает с различными сетевыми конфигурациями