2017-01-03 9 views
0

В docker-compose legacy yml, если вы связываете службу, которую он использовал для создания переменной среды servicename_PORT, которую вы могли бы использовать для обнаружения порта связанного контейнера. В новом формате v2 у нас есть определенные пользователем сети, которые добавляют имя службы во внутренний DNS и поэтому мы можем подключаться к связанным службам, но как мы обнаруживаем, что порт, связанный с сервисом? Единственный способ, с помощью которого я могу думать, - создать переменную окружения для каждой связанной службы, где я могу поместить порт, но тогда у меня будет тот же самый порт два раза в компоновке докеров: один раз в разделе экспонирования самой службы и один раз как переменная среды в службе, которая подключается к ней. Есть ли более суровый способ обнаружения открытого порта?Как найти открытый порт связанного сервиса с форматом Docker Compose v2?

ответ

0

Для этого обычно использовать регистратор + сервис обнаружить, это означает, что услуги, как https://www.consul.io/регистраторе

В основном, это добавляет API для вас либо смотреть Kv магазин для вас сервиса определений (порт/ip), который затем может быть случайным или даже использовать DNS, включенный в консул. Последнее не поможет с портами, для чего вы используете реестр.

Если вы хотите уклониться от этой оптимальной практики. установите гнездо док-станции и используйте docker inspect <servicename>, чтобы найти порт.

services: 
    other: 
    container_name: foo 
    image: YYYY 
    theonedoingthelookup: 
    image: ZZZZ 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 

Вам нужно будет иметь инструмент докер Cli, установленный в контейнере, а затем запустить это внутри контейнера ZZZZ

docker inspect YYYY

Используйте некоторые Grep/AWK/фильтры для извлечения информации, необходимой

0

Это какой-то порт службы работает как в контейнере. Сопоставления портов не применяются к контейнеру < -> контейнерная связь, только хост < -> контейнерная связь.

Например:

version: '2' 

services: 
    a: 
    ... 
    networks: 
    - my-net 
    b: 
    ... 
    networks: 
    - my-net 
networks: 
    my-net: 

Допустим a запущен веб-сервер на порту 8080, b бы быть в состоянии поразить его, отправив запрос на a:8080.

+0

Проблема в том, что b не знает, на каком порту a работает служба. С устаревшей компоновкой связывания порт был открыт в переменной среды name_PORT. Теперь нет возможности «b» узнать открытый порт, если все, что он знает, это имя службы (то есть «a»). –

+0

Какую услугу вы используете в 'a'? Разве порт не статичен? – johnharris85

+0

A может быть любой услугой, «b» - просто прокси, я хочу, чтобы он был общим. @ Нижеприведенный ниже ответ EugenMayer делает трюк для меня с использованием сокета. –

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

  • Нет связанных вопросов^_^