Получить docker IP контейнера по псевдониму - PullRequest
0 голосов
/ 08 мая 2020

Есть ли способ получить контейнер и его свойства из среды хоста, по крайней мере, получить его IP-адреса, запросив его псевдоним?

Для ясности я имею в виду к фактическому псевдониму, который вы можете дать контейнерам в определенных c сетях, см. здесь

В настоящее время мое решение до сих пор выполняет итерацию по всем контейнерам через остальной API и проверяет, соответствует ли псевдоним то, что я ищу. Очевидно, что это не идеально, так как это плохо масштабируется в случае, если на хосте много контейнеров.

В идеале я бы хотел просто отправить DNS-запрос на встроенный DNS-сервер docker, но это кажется невозможным. См. Этот вопрос / ответ для получения дополнительной информации

Кто-нибудь знает лучшее решение?

/ update

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

Имейте в виду, что фильтрация всех контейнеров по имени сети возможно в docker api, позволяя один вызов REST для api. Однако, хотя ключ «Псевдоним» находится в результате REST, он никогда не содержит никаких значений. (это может быть ошибкой, я не уверен.) Вы должны получить GET для указанного контейнера c, т.е. GET /v1.24/containers/container-uuid/json, прежде чем вы сможете увидеть его псевдонимы.

1 Ответ

0 голосов
/ 08 мая 2020

Помните, что большинство этих деталей бесполезны за пределами Docker пространства; за исключением одной очень специфической конфигурации c (на том же собственном хосте Linux, что и контейнер), вы не можете напрямую получить доступ к IP-адресам c контейнера.

Если вы можете запустить docker, вы можете запускать контейнеры, чтобы получить косвенный доступ к системе Docker DNS. Например, давайте запустим контейнер с псевдонимом в сети не по умолчанию:

docker network create testnet
docker run \
  --net testnet \
  --name sleep \
  --network-alias zzz \
  -d \
  busybox \
  sleep 600

Теперь мы можем запустить другой контейнер в той же сети и начать делать DNS-запросы. Мы можем получить Docker -внутренний IP-адрес псевдонима zzz:

$ docker run --net testnet --rm giantswarm/tiny-tools dig +short zzz
172.18.0.2

Затем мы можем выполнить обратное разрешение этого адреса:

$ docker run --net testnet --rm giantswarm/tiny-tools dig +short -x 172.18.0.2
sleep.testnet.

Это каноническое имя имя контейнера и сеть, и если вам нужно глубже изучить, вы можете теперь docker inspect sleep.

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