2015-04-07 4 views
0

Я играю с докером. Теперь я хочу назначить IP-адрес контейнеру из того же диапазона IP-адресов, что и моя хост-система.Докер. Назначить IP из того же диапазона, что и Host

Мое устройство имеет IP-адрес 192.168.1.50 (192.168.1.0/24 network). И я хочу использовать, например, 192.168.1.51 из той же сети для контейнера Docker.

Для этого I`ve установлен бридж-утилитами (я использую Ubuntu 14.04) и перенастроить свои интерфейсы:

auto lo 
iface lo inet loopback 

# The primary network interface 
auto eth0 
iface eth0 inet manual 

auto br0 
iface br0 inet static 
     address 192.168.1.50 
     network 192.168.1.0 
     netmask 255.255.255.0 
     broadcast 192.168.0.255 
     gateway 192.168.1.1 
     dns-nameservers 8.8.8.8 8.8.4.4 
     bridge_ports eth0 
     bridge_stp off 
     bridge_fd 0 
     bridge_maxwait 0 

Теперь у меня есть такая конфигурация:

# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
    inet 127.0.0.1/8 scope host lo 
     valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000 
    link/ether 08:00:27:a5:22:5d brd ff:ff:ff:ff:ff:ff 
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff 
    inet 172.17.42.1/16 scope global docker0 
     valid_lft forever preferred_lft forever 
    inet6 fe80::5484:7aff:fefe:9799/64 scope link 
     valid_lft forever preferred_lft forever 
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 08:00:27:a5:22:5d brd ff:ff:ff:ff:ff:ff 
    inet 192.168.1.50/24 brd 192.168.0.255 scope global br0 
     valid_lft forever preferred_lft forever 
    inet6 fe80::a00:27ff:fea5:225d/64 scope link 
     valid_lft forever preferred_lft forever 

Как создать каждый новый докеры с IP-адресами из одного и того же IP-диапазона 192.168.1.0/24 в качестве хост-компьютера? Как указать для каждого нового контейнера докера использовать br0 интерфейс?

+0

Я не пробовал, но я думаю, что это примерно то, что делает аргумент docker '-net = host'. –

+0

Это связано с http://stackoverflow.com/questions/35742807/docker-1-10-containers-ip-in-lan и http://stackoverflow.com/questions/22641828/how-to-set-a -docker-container-ip? lq = 1 – Dreamcat4

ответ

-1

Докер не может этого сделать. Он может устанавливать IP-адреса только по собственному решению.

+0

Это уже не так. Теперь IP-адреса могут быть установлены с параметром '--ip'. – cantSleepNow

+0

@cantSleepNow спасибо. Могут ли докеры использовать мосты linux? – ipeacocks

+0

Не совсем уверен, что вы подразумеваете под «linux мостами». Docker имеет собственный драйвер моста https://docs.docker.com/engine/userguide/networking/dockernetworks/#the-default-bridge-network-in-detail – cantSleepNow

1

Не прямой ответ, но он может помочь, если ваша цель открыть докеры в локальной сети.

Я бегу большинство моих dockerized услуг, привязанных к собственному статические IP-адреса, используя следующий подход:

  1. я создаю IP-псевдонимы для всех служб на Docker хосте
  2. Затем я бегу каждую услугу перенаправления портов с этого IP в контейнер, поэтому каждая служба имеет собственный статический ip, который может использоваться внешними пользователями и другими контейнерами.

Пример:

docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns 
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry 
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache 
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror 
... 

В результате всех (в том числе других контейнеров докеров), может пользоваться услугами в контейнерах хорошо известный адрес или именем, и вы даже могли перемещать контейнеры (с соответствующим псевдонимом) к другому хосту и все будет продолжать работать.

+0

так 172.16.177. {20,12,13,19} находятся на ваших сетевых интерфейсах хост-машины? – ipeacocks

+0

Это ip-псевдонимы (http://en.wikipedia.org/wiki/IP_aliasing) для основного ip-интерфейса. Это похоже на то, что у сетевого интерфейса много адресов. И я мог удалить псевдоним на одном хосте и добавить его другому хосту, когда мне нужно переместить контейнер. – ISanych