2016-01-11 6 views
6

У меня есть существующее приложение, состоящее из 4 контейнеров докеров, работающих на одном хосте. Они связаны между собой командой link.Докеры, связанные с контейнерами, Docker Networks, Compose Networks - как мы должны теперь связывать контейнеры

Однако после некоторых обновлений докеров поведение link было устаревшим и изменилось. У нас возникают проблемы, когда контейнеры теряют связь друг с другом.

Итак, докер говорит, что использует новую функцию Network над link ed контейнерами. Но я не вижу, как это работает.

Если 2 контейнера находятся в одной и той же сети, то те же самые ENV vars автоматически отображаются на контейнерах, как если бы они были связаны?

Или файл hosts обновлен корректным содержимым контейнера/IP-адресами? Даже после docker restart?

Я не вижу в документах, как контейнер может найти местоположение другого в своей сети?

Кроме того, compose выглядит как простая настройка для связывания контейнеров и может автоматизировать некоторые из них - будет ли это способ выбора для определения нескольких контейнерных приложений? Или это слишком рано, чтобы запустить его в производство?

Есть ли compose поддержка нескольких конфигураций хоста?

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

ответ

3

Если 2 контейнера находятся в одной и той же сети, такие же ENV VARS автоматически подвергается на контейнерах, как если бы они были связаны?

Нет, теперь вам нужно будет использовать имена контейнеров в качестве их имен хостов. Новая сетевая функция не знает, какие порты будут использоваться. Подумайте об этом, поскольку 2 компьютера подключены к одному и тому же сетевому концентратору. Оба могут обращаться к другому по имени своего хоста.

является файлом хостов обновлен с правильным именем контейнера/IP-адресами? Даже после перезагрузки докеров?

Да, /etc/hosts Файлы для всех контейнеров, которые являются частью сети, будут обновляться в режиме реального времени двигателем докеров.

Я не вижу в документах, как контейнер может найти местоположение другого в своей сети?

Использование названия контейнера. См. Раздел Connect containersРабота с сетевыми командами doc: После подключения контейнеры могут связываться с использованием IP-адреса или имени другого контейнера.

Кроме того, сочиняет внешний вид, чтобы иметь простой набор для связывания контейнеров, а также автоматизировать некоторые из этого - сочинял бы путь для определения мульти приложений контейнера? Или это слишком рано, чтобы запустить его в производство?

Compose поддерживает новую функцию сети как бета-версию, предлагая опцию --x-networking. Вам не следует использовать его еще в производстве (текущая версия для заказа 1,5).

Кроме того, текущая реализация немного неудобно, так как мы должны использовать полное имя контейнера, который состоит из имени проекта + _ + имени контейнера + _1. documentation говорит, что следующая версия (текущая версия 1.5) улучшит это, так что нам не нужно беспокоиться о названии проекта для адресации контейнеров.

Состоит ли поддержка нескольких конфигураций хоста?

Да, в conjonction с Роем, как описано в overlay network documentation

+0

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

+0

Как вы узнаете порт, который был выставлен контейнером? Скажем, у меня есть 2 контейнера, a, который отображает порт 7474 и b. B может найти A через файл 'hosts' - http: // a, но есть ли способ обнаружить порт, который отображается? С 'link' вы можете проверить env var .... –

+0

В сети нет перевода порта. Порт может быть другим, только если вы _publish_ порт контейнера на хосте Docker, а не когда вы просто _expose_ порт – Thomasleveil