2014-01-22 2 views
8

Как исправить статический IP-адрес для контейнера?каждый раз, когда я запускаю контейнер с докере, он получает другой IP

Сначала я начала контейнера и осмотрите его, он говорит

"NetworkSettings": { 
    "IPAddress": "XX.XX.206.98", 
    "IPPrefixLen": 27, 
    "Gateway": "XX.XX.206.105", 
    "Bridge": "public", 
    "PortMapping": null, 
    "Ports": {} 
}, 

тогда я остановить его и перезапустить, это как

"NetworkSettings": { 
    "IPAddress": "XX.XX.206.99", 
    "IPPrefixLen": 27, 
    "Gateway": "XX.XX.206.105", 
    "Bridge": "public", 
    "PortMapping": null, 
    "Ports": {} 
}, 

Как вы можете видеть, что изменилось. Я просто создал мост с именем public, и начал докер с добавлением -b=public. Как установить статический IP-адрес для контейнера?

+0

Это важная функция, предположим, что у вас есть служба db, работающая как докер, и весь URL-адрес jdbc привязан к этому ip addr. вам необходимо изменить каждый URL-адрес jdbc после перезапуска контейнера db. – hihell

ответ

4

ОТ Docker 1.10 ПО

# create a new bridge network with your subnet and gateway for your ip block 
$ docker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 iptastic 

# run a nginx container with a specific ip in that block 
$ docker run --rm -it --net iptastic --ip 203.0.113.2 nginx 

# curl the ip from any other place (assuming this is a public ip block duh) 
$ curl 203.0.113.2 

UPDATE

Теперь единственный способ получить статический IP через два скрипта: pipework или ovs-docker

Существует сильное направление к использованию Open vSwitch в качестве «включенной в батарею» версии многоходовых контейнеров-докеров.

Следите за socketplane.


Данное поведение является конструктивным.

Существует very interesting discussion для его изменения в будущих выпусках.

До сих пор единственным способом вы можете сделать это падает обратно в Линукс контейнеры:

docker run \ 
-n=false \ 
-lxc-conf="lxc.network.type = veth" \ 
-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 my_image:my_tag /bin/bash 

Так -n=false отключает автоматическую сети Docker и все -lxc-conf варианты реально определить виртуальную сеть в соответствии с твои нужды.

+0

Это больше не работает, можете ли вы обновить свой ответ? –

+0

На самом деле я вижу два способа решения проблемы: https://github.com/jpetazzo/pipework и https://docs.docker.com/articles/networking/#building-a-point-to-point-connection none Это реальный ответ на этот вопрос. – tommasop

+0

Теперь я использую трубопровод, но он чувствует себя как взломанный –

Смежные вопросы