2017-01-12 5 views
0

Я развиваю большую архитектуру, разбитую на отдельные части.Как добраться до контейнеров-докеров с сетевым хостом от w10 шт?

Каждая часть использует службы (например, redis) и другие проекты.

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

Теперь это работает отлично, если я запускаю свою собственную архитектуру непосредственно на своем компьютере. Но теперь я запускаю свою архитектуру также в/в контейнерах докеров (подготовка к производству) и пытаюсь запустить их в своей системе. Сначала они не могут добраться до уже настроенных контейнеров (услуг). Это я решил, запустив свои собственные докеры-контейнеры архитектуры как --network host.

Теперь все мои контейнеры работают отлично, но я не могу добраться до них, когда я перехожу на http://localhost:80 (один из контейнеров работает на порту 80). Таким образом, другие контейнеры на других портах также недоступны. Я сделал что-то не так? есть ли способ их достичь?

im running docker on windows 10 pro. (примечание: докер 1.12.5, обновление до 1.12.6 сбоев как-то)

+0

Вы правильно настроили свои порты? Я понимаю, что ваше приложение работает в контейнере на порту 80, но неясно, отобразили ли вы этот порт за пределами контейнера. Вы должны предоставить дополнительную информацию о том, как вы запускаете свои контейнеры. –

+0

@AlexanderGeorge, если я запускаю в сети = хост, мне все еще нужно отображать порты? –

ответ

1

Использование --network host просто присоединяет сетевые интерфейсы вашего хоста в контейнеры. Это не обязательно позволяет передавать порт через брандмауэр системы.

Если вы связываете порты контейнера, например. запустите контейнеры с -p <host_port>:<container_port>, Docker должен соответствующим образом настроить правила брандмауэра и заставить все это работать. (Когда контейнер останавливается, он также должен сам очиститься.)

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

Во-первых, создайте сеть для своего приложения.

docker network create myapp 

Затем скажите каждому контейнеру, чтобы использовать эту сеть.

docker run --network myapp <other options...>