Как найти docker swarm хост на котором запущен контейнер по id или внутреннему hostname

Share and Enjoy !

Shares

Иногда надо узнать на каком именно хосте docker swarm запущен контейнер, зная только его внутренний hostname, например если мы его знаем из системы мониторинга, что-то произошло, а меры надо принимать на хосте, например освободить места на диске.

Я пытался найти способ узнать это по-простому, но так и не нашёл. Ну и пришёл к двум способам это выяснить и скомбинировал всё в одном скрипте:

  1. втупую делается “ssh docker ps grep” на хостах docker swarm. Работает быстро, по-меньшей мере с тремя нодами, но требует, соответственно, доступ по ssh на все хосты в сварме, под юзером, имеющим доступ к работе с docker
  2. метод, использующий cli docker swarm на машине-менеджере swarm, но требует три слоя запуска docker cli и занимает прилично времени

Касательно скорости – на трёх нодах первый метод отрабатывает меньше секунды, тогда как второй выполняется около 25 секунд.

Скрипт имеет неплохую инструкцию по эксплуатации и возможности по конфигурации через переменные окружения.

Share and Enjoy !

Shares