Раскомментировав DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
в /etc/default/docker
качестве Matt Carrier предложил ничего НЕ работать для меня. Не помещал в этот файл и DNS-серверы моей корпорации. Но есть другой способ (читайте дальше).
Во-первых, давайте проверим проблему:
$ docker run --rm busybox nslookup google.com # takes a long time
nslookup: can't resolve 'google.com' # <--- appears after a long time
Server: 8.8.8.8
Address 1: 8.8.8.8
Если кажется, что команда зависает, но в конечном итоге выдает ошибку «не удается разрешить 'google.com'», значит, у вас та же проблема, что и у меня.
Команда nslookup
запрашивает DNS-сервер 8.8.8.8, чтобы преобразовать текстовый адрес google.com в IP-адрес. Как ни странно, 8.8.8.8 - это общедоступный DNS-сервер Google . В случае nslookup
сбоя общедоступные DNS-серверы, такие как 8.8.8.8, могут быть заблокированы вашей компанией (что, как я полагаю, из соображений безопасности).
Можно подумать , что добавление DNS - серверов вашей компании , чтобы DOCKER_OPTS
в системе /etc/default/docker
должно сделать трюк, но по какой - то причине, это не работа для меня. Ниже я описываю, что у меня работало.
РЕШЕНИЕ :
На хосте (я использую Ubuntu 16.04) узнайте адреса первичного и вторичного DNS-серверов:
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
IP4.DNS[2]: 10.0.0.3
Используя эти адреса, создайте файл /etc/docker/daemon.json
:
$ sudo su root
# cd /etc/docker
# touch daemon.json
Поместите это в /etc/docker/daemon.json
:
{
"dns": ["10.0.0.2", "10.0.0.3"]
}
Выход из корня:
# exit
Теперь перезапустите докер:
$ sudo service docker restart
ВЕРИФИКАЦИЯ :
Теперь убедитесь, что добавление /etc/docker/daemon.json
файла позволяет преобразовать google.com в IP-адрес:
$ docker run --rm busybox nslookup google.com
Server: 10.0.0.2
Address 1: 10.0.0.2
Name: google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net
ЛИТЕРАТУРА :
Я основал свое решение на статье Робина Уинслоу, который заслуживает всей признательности за это решение. Спасибо, Робин!
"Исправить конфигурацию DNS сети Docker." Робин Уинслоу. Проверено 9 ноября 2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
newgrp docker
вместо полного выхода из системы, а затем авторизуюсь после того, как предоставил себеsudo usermod -aG docker myuserid
... это крайний случай для конечно, однако это действительно происходит