Настройка DNS для Docker-демона на ОС с помощью systemd

DNS-сервер по умолчанию для Docker (например, 8.8.8.8) заблокирован, когда я работаю, поэтому я хочу изменить значение по умолчанию. Я смог сделать это, используя

$ docker daemon --dns <mydnsaddress>

но я хочу сделать это, используя системную drop-in вместо этого, поскольку официальные документы Docker рекомендуют этот путь. Я создал файл /etc/systemd/system/docker.service.d/dns.conf и использовал такие вещи:

[Service]
DNS=<mydnsaddress>

Но я просто не знаю, каким должно быть имя переменной. Как это установить? Что еще более важно, есть ли страница, которая документирует все конфигурационные переменные, которые можно использовать в системных drop-ins для Docker?

(Кстати, это Docker 1.9 на Ubuntu 15.10, хотя я не подозреваю никаких ошибок)

Ответ 1

Все .conf файлы в /etc/systemd/system/docker.service.d отменяют настройки из файла /usr/lib/systemd/system/docker.service, что почти что вы пробовали.

Вместо ввода строки DNS=.. вам нужно скопировать часть ExecStart= из файла /usr/lib/systemd/system/docker.service в dns.conf (или mydocker.conf). Добавьте --dns $ip после daemon части ExecStart. Например:.

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --dns 192.168.1.1 -H fd://

Где 192.168.1.1 является ip сервера dns.

Теперь перезагрузите docker через systemctl, и docker должен перезапустить его с помощью собственных dns. (Можно проверить через systemctl status docker.service | grep dns).

Обратите внимание, что требуется пустой ExecStart=, поскольку systemctl только отменит ExecStart, если он сначала очищен.

Также обратите внимание, что после редактирования файлов в /etc/systemd/system/ требуется systemctl daemon-reload.

Последнее замечание состоит в том, что на некоторых системах docker.service не находится в /usr/lib/systemd/system/, а в /lib/systemd/system/.