2016-06-30 2 views
0

У меня есть небольшая проблема с пониманием этого. Когда я запускаю 3 контейнера в Docker, они получают 3 разных IP-адреса, которые назначаются последовательно, я могу обращаться к ним из других контейнеров, и все работает нормально.
Но когда я запускаю другой контейнер перед этими 3, 3 получают разные IP-адреса, и вся установка идет в ад.Как я могу всегда подключаться к одному контейнеру для докеров?

Я довольно долго приставал к Google, но, похоже, я не нашел подходящего (и не слишком сложного) решения, чтобы иметь один устойчивый способ подключения к определенному контейнеру. Дело не в том, что я хочу назначить сам IP, просто чтобы сказать хосту-докеру что-то вроде «каждый раз, когда запускается контейнер X, назначает ему IP 172.17.0.X»
Должен быть какой-то способ, в котором порядок, в котором Я запускаю контейнеры, не имеет значения, не может быть, что я должен менять свои настройки каждый раз, когда я перезапускаю контейнеры.

Значит, некоторая помощь здесь будет приятной?
Способ, которым я могу назначить IP-адреса контейнеру или предоставить ему какой-то псевдоним, который я могу адресовать из другого контейнера.

+1

«Это не что я хочу назначить сам IP, просто чтобы сообщить хосту docker что-то вроде «каждый раз, когда запускается контейнер X, назначьте ему IP 172.17.0.X». Это предложение не имеет смысла. – BMitch

ответ

1

Подключиться от контейнера к другому контейнеру через ip это не «докер-путь», поэтому действительно правильный способ - использовать --link, как указано Nguyen Sy Thanh Son.
В качестве примера:
docker run --name=db image1 docker run --name=app --link outernamedb:internalname image2 , а затем внутри app контейнера используют internalname:3306

Но это не будет работать, если вы попытаетесь запустить appперед темdb, для этого случая есть своего рода юридическое хак для докер выше 1.11.
От docker official docks вы можете использовать --ip флаг, чтобы установить точный IP для контейнера docker run --name=db --ip 172.17.0.90 image1 docker run --name=app --ip 172.17.0.91 image2 , а затем внутри контейнера app использовать 172.17.0.90:3306

2

Я думаю, что вы должны использовать hostname вместо IP-адреса в контейнерах Docker. И когда вы запускаете контейнеры Docker, вы можете использовать --link между контейнером. См. https://docs.docker.com/v1.8/userguide/dockerlinks/#communication-across-links

В новой версии легко соединить контейнеры в одной сети. См. https://docs.docker.com/engine/userguide/networking/dockernetworks/

1

Использование Docker Networks. Ссылки устарела и IP-адрес вещи это сумасшествие :)

$ docker network create my-net 
$ docker run -d --net my-net --name container1 image1 
$ docker run -d --net my-net --name container2 image2 
$ docker exec -it container1 sh 
# ping container2 
PING container2 (172.21.0.3): 56 data bytes 
64 bytes from 172.21.0.3: seq=0 ttl=64 time=0.073 ms 
... 
Смежные вопросы