Розкоментувати 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." Робін Уінслоу. Отримано 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
newgrp docker
замість того, щоб робити повний журнал, а потім увійдіть після надання себеsudo usermod -aG docker myuserid
... його крайній випадок для впевнений, що все-таки буває