Я задал этот вопрос на docker's IRC в минувшие выходные, но должен был возглавить прежде чем я думал, что через ответы:Объявляя приложение внутри контейнера (докер)
Если у меня есть ряд приложений, выполняющихся в контейнерах (давайте, на данный момент, предположим, что все они работают на одном физическом оборудовании, но это не обязательно), и я хочу, чтобы каждый из них мог автоматически находить друг друга.
Используя какой-либо реестр (например, etcd или DNS-SD/Bonjour), вы можете объявить о своей услуге и любых соответствующих подробностях, а другие приложения узнают о них и трафике трафика соответственно.
Проблема заключается в том, что, хотя приложение может узнать, какое имя хоста/порт оно обслуживает на в пределах контейнера, это не обязательно должен быть порт или адрес, из которого он доступен. Есть два бита информации, которые должны быть соединились:
- Где услуга может быть доступна; доступный снаружи контейнера
- Что такое услуга (номер версии, вид обслуживания); доступный изнутри контейнера
Как бы вы порекомендовали мне получить эту информацию через контейнерный барьер?
- Я могу предоставить докер через TCP в контейнеры, поэтому приложение может запросить, где его показывать, но это, похоже, нарушает разделение проблем.
- Я мог бы открыть файл/порт в контейнере, который запрашивает хост-система после запуска контейнера для подготовки к анонсу, но это немного похоже на то, что я буду изобретать WSDL.
Любые мысли или рекомендации относительно того, как я должен решить эту проблему?
Это то, что я пытался (плохо) объяснить в том, что я теперь пронумеровал «2». Если я буду ждать, пока контейнер не будет запущен, я могу заставить хост-систему выполнить регистрацию, но тогда у меня нет единого способа определения * того, что * этот контейнер делает. (Информация, например, какая услуга (-ы) находится/находится в контейнере, и какие версии они не могут быть легко доступны). –
@JP. Понятно, это проблема с курицей и яйцом. Я не думаю, что есть эффективный способ решения проблемы. Приложение в контейнере должно в идеале быть апатридом, позволяющим его развертывать несколько раз. Каждый экземпляр этого контейнера имеет разные номера портов, которые в конечном итоге определяются хост-системой. Я полагаю, докер - это инструмент для создания систем PAAS, а не PAAS сам по себе. –
@JP. См. Ссылку на maestro –