Задание параметров сетевых интерфейсов docker в Ubuntu (IP, gateway, etc.)
Делалось для Docker версии 1.X
Сейчас, они что-то там пилят, но пока все сырое.
https://github.com/docker/libnetwork/blob/master/docs/overlay.md
https://github.com/docker/libnetwork
Как делал я (когда только приступил изучать и мне очень не хватало отсутствие у контейнеров ip адресации)
Может есть вариант и попроще.
$ sudo service docker.io status
docker.io start/running, process 6536
$ ifconfig
docker0 Link encap:Ethernet HWaddr aa:f0:35:9b:72:10
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::507e:2fff:fea1:6ae0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1224 (1.2 KB) TX bytes:648 (648.0 B)
eth0 Link encap:Ethernet HWaddr bc:ae:c5:30:13:a5
inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::beae:c5ff:fe30:13a5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:60789443 errors:0 dropped:73 overruns:0 frame:0
TX packets:72579419 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:47728813127 (47.7 GB) TX bytes:81564408216 (81.5 GB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:258380 errors:0 dropped:0 overruns:0 frame:0
TX packets:258380 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:311261549 (311.2 MB) TX bytes:311261549 (311.2 MB)
veth5f79 Link encap:Ethernet HWaddr aa:f0:35:9b:72:10
inet6 addr: fe80::a8f0:35ff:fe9b:7210/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:738 (738.0 B) TX bytes:648 (648.0 B)
Создание моста
$ sudo apt-get install bridge-utils
Без lxc возникала ошибка при вызове контейнера с параметрами:
Error: Cannot start container 15251ef28c49d0cffeedcec5f90677c58cd2a4fba385f9335414eeb56deab440: lxc.network.ipv4 = 192.168.1.25/24 is not supported by the native driver
Устанавливаем lxc
$ sudo apt-get install lxc
// Удаляю Network Manager и resolvconf
$ sudo apt-get remove network-manager
$ sudo apt-get remove resolvconf
$ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
post-up /sbin/brctl setfd br0 0
$ sudo vi /etc/resolv.conf
nameserver 192.168.1.1
$ sudo reboot
Настройка docker для работы с мостом
// Вырубаю докер с его виртуальным адаптером
$ sudo service docker.io stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
$ sudo vi /etc/default/docker.io
DOCKER_OPTS="-b=br0 -d -e lxc"
-b=br0 - использовать созданный мост
-e lxc - использовать расширения lxc, чтобы работали ключи --lxc-conf.
-d - стартовать в режиме демона.
$ sudo service docker.io restart
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.bcaec53013a5 no eth0
veth9fe6
Запуск контейнера docker с нужными настройками сети
$ sudo docker run -i -t \
--lxc-conf="lxc.network.ipv4 = 192.168.1.11/24" \
centos:centos6 /bin/bash
Можно более подробно задать параметры
$ sudo docker run \
-n=false \
-lxc-conf="lxc.network.ipv4 = 172.16.42.20/24" \
-lxc-conf="lxc.network.ipv4.gateway = 172.16.42.1" \
-lxc-conf="lxc.network.link = docker0" \
-lxc-conf="lxc.network.name = eth0" \
-lxc-conf="lxc.network.flags = up" \
-i -t centos:centos6 /bin/bash
Сейчас работаю в основном с 1 контейнером docker. Настройка сети при этом не нужна.
Последняя версия, с которой пробовал работать с параметрами lxc-conf была версия docker 1.3.
При этом контейнер помимо заданного ip адреса, назначал свой. Возможно, что docker брал первый попавшийся свободный ip из подсети. По идее, опция -n=false должна решать эту проблему. Но сейчас уже не помню. Вроде этого было недостаточно. Возможно, что в новых версиях исправили.
Почитать: http://askubuntu.com/questions/452611/how-to-use-docker-io-containers-in-ubuntu-14-04-with-ipv6