Иногда надо узнать на каком именно хосте docker swarm запущен контейнер, зная только его внутренний hostname, например если мы его знаем из системы мониторинга, что-то произошло, а меры надо принимать на хосте, например освободить места на диске.
Я пытался найти способ узнать это по-простому, но так и не нашёл. Ну и пришёл к двум способам это выяснить и скомбинировал всё в одном скрипте:
- втупую делается “ssh docker ps grep” на хостах docker swarm. Работает быстро, по-меньшей мере с тремя нодами, но требует, соответственно, доступ по ssh на все хосты в сварме, под юзером, имеющим доступ к работе с docker
- метод, использующий cli docker swarm на машине-менеджере swarm, но требует три слоя запуска docker cli и занимает прилично времени
Касательно скорости – на трёх нодах первый метод отрабатывает меньше секунды, тогда как второй выполняется около 25 секунд.
Скрипт имеет неплохую инструкцию по эксплуатации и возможности по конфигурации через переменные окружения.