Docker 1.9 + Weave 1.2.1 bridge mode

Сегодня, после обновления на Docker 1.9 у меня вполне ожидаемо сломался ранее прекрасной работающий Weave.
Описание возникших проблем и их решение под катом.

Проблема №1.

Проявляется в Ubuntu 14.04.

При попытке выполнить weave launch происходит следующее:

root@sahara:~/weave# /usr/local/bin/weave launch --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70
Error deleting container: Error response from daemon: Unable to remove filesystem for 4f15a00bcf3b7d6df83ed8467cad98177df331d2deed580c4547effc2db13a02: remove /var/lib/docker/containers/4f15a00bcf3b7d6df83ed8467cad98177df331d2deed580c4547effc2db13a02/shm: device or resource busy

Как выяснилось, это уже известная проблема:
github.com/weaveworks/weave/issues/1647
github.com/weaveworks/weave/issues/1652

Там пишут, что, возможно, поможет переход на использование overlayfs вместо aufs, но мне помогла установка ядра 3.19 (пакет linux-image-extra-virtual-lts-vivid)

Спасибо за помощь ребятам из Weave, сидящим на канале #weavenetwork в IRC

Проблема №2

Вторая проблема связана с тем, что я использую Weave для связи контейнеров в кластере Mesos + Kubernetes, и мне совсем не нужны болтающиеся неиспользуемые eth0 в контейнерах. Тем более, что я это настраивал еще во время Weave 1.0, когда еще не были придуманы методы адекватной связки Mesos и Weave.

Поэтому я использовал не рекомендуемый официально метод привязки weave к контейнерам заменой моста docker0 на weave.
Это работало вплоть до Docker 1.8 + Weave 1.1.1
Сегодня же все сломалось:

root@sahara:~/weave# /usr/local/bin/weave launch-router --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70
Error response from daemon: Cannot start container b5c0d3e7b69a0101586d1ffe79862f292ed72b72d3f6bf5e21debf086b81db67: [8] System error: failed to set gateway while updating gateway: network is unreachable
root@sahara:~/weave# 


Тут уже помощь клуба из IRC не помогла, пришлось выплывать самому.
Путем долгих проб и ошибок выяснилось, что корень зла крылся в присвоении статического IP адресв мосту weave при начальной конфигурации.
А именно. Ранее я поднимал мост такой записью в /etc/network/interfaces.d/weave:

auto weave
iface weave inet manual
        pre-up /usr/local/bin/weave --local create-bridge
        post-up ip addr add dev weave 10.4.7.1/16
        pre-down ifconfig weave down
        post-down brctl delbr weave


Как выяснилось, если убрать ip add..., то docker --bridge weave запускается и нормально работает.
Так же, для запуска weave в таком режиме требуется выключать FASTDP:
export WEAVE_NO_FASTDP=1
В итоге, релевантные части фалов настройки:
/etc/network/interfaces.d/weave:

auto weave
iface weave inet manual
        pre-up WEAVE_NO_FASTDP=1 /usr/local/bin/weave --local create-bridge
        pre-down ifconfig weave down
        post-down brctl delbr weave


/etc/init/weave.conf:

start on filesystem and started docker
respawn
script
    export DOCKER_BRIDGE=weave
    export WEAVE_NO_FASTDP=1
    /usr/local/bin/weave launch-router --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70
    /usr/local/bin/weave expose 10.4.7.1/16
    /usr/bin/docker attach weave
end script


/etc/default/docker:

DOCKER_NETWORK_OPTS="--bridge weave --fixed-cidr=10.4.7.0/24"

Теперь все работает как и раньше.

Возможно, этот опыт сэкономит кому-нибудь время и нервы.

© Habrahabr.ru