Как правильно настроить сетевой доклер в Ubuntu Gnome 15.10

7

В Ubuntu Gnome 15.10 Докер почти работает из коробки, но есть тонкость. Кажется, что контейнеры не могут получить доступ к сети до тех пор, пока я не перезапущу службу докеров.

После загрузки хоста интерфейс docker0 не имеет IP-адреса.

$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr ea:03:cc:9c:7a:cd
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:108 (108.0 B)

Если я запустил контейнер, то интерфейс docker0 получит адрес ipv6, и, насколько я могу судить, из контейнера невозможно подключиться к сети. Я не могу выполнить ping IP-адрес хоста, IP-адреса LAN или IP-адреса. Я использую ubuntu: надежное изображение и запуск bash в качестве основного процесса контейнера.

$ ifconfig docker0 
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

Если я перезапущу docker, тогда docker0 получит адрес ipv4 (в дополнение к адресу ipv6), и все будет работать как ожидалось.

$ sudo service docker restart 
$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

Конечно, я могу перезапустить службу докеров каждый раз, когда я перезапускаю свою машину, или, возможно, взломать сценарий запуска, чтобы сделать это для меня (я не пробовал). Кто-нибудь знает о чистом способе исправить это?

    
задан marcv81 28.10.2015 в 15:34
источник

2 ответа

7

TL; DR: я установил Docker, используя «apt-get install docker.io». Установка последней версии после Ссылка устраняет проблему.

После изучения проблемы, похоже, что версия Docker в 15.10 не может корректно создавать и инициализировать интерфейс docker0. В первом запуске (запуск служебной докеры) он создаст интерфейс, но не сможет его инициализировать, а при последующем запуске (перезагрузка сервисной докеры) он инициализирует его. Это можно воспроизвести последовательно, добавив и удалив интерфейс вручную с помощью brctl. Эта ошибка была исправлена ​​в последней версии Docker.

    
ответ дан marcv81 29.10.2015 в 07:12
источник
1

Мне это работает NetworkManager. Служба Docker создает мост, так как он затем предоставляет его на dbus. NetworkManager запускает новый интерфейс на dbus и пытается его настроить (поскольку достаточно глупо, чтобы знать, что мост docker0 уже настроен отлично). NetworkManager иногда удается настроить (переконфигурировать) docker0, но иногда он будет терпеть неудачу. Поэтому иногда вы перезагружаете окно, а docker0 будет назначаться IP, иначе он не будет.

Чтобы остановить загрузку NetworkManager, добавьте

iface docker0 inet manual

в /etc/network/interfaces , если NetworkManager.conf имеет

[ifupdown] managed=false

, который по умолчанию равен 15.10

(вероятно, ошибка должна быть увеличена, чтобы остановить NetworkManager от испортить интерфейсы докеров)

    
ответ дан greg one 11.12.2015 в 13:21