Le titre de la question est le problème spécifique que j'essaie de résoudre. Mais encore plus simplement, est-il possible de lister toutes les tâches d'un service avec les adresses IP des nœuds qui les exécutent?Dans un Docker Swarm, comment puis-je trouver quel nœud IP exécute une tâche donnée?
docker service ps
liste les ID de tâche avec le nom d'hôte du noeud sur lequel s'exécute la tâche. Aucun autre identificateur de noeud n'est fourni tel que ID ou IP. Mais j'utilise Vagrant pour gérer les machines virtuelles et sans nom d'hôte configuré, tous les noms d'hôte sont nommés de la même façon ("vagabond"). Cela rend très difficile pour moi de comprendre exactement quel nœud exécute la tâche!
Ceci est important parce que je dois manually delete unused images ou risquer de faire planter les machines à l'avenir quand il n'y a plus d'espace disque. Donc, déterminer où une tâche est exécutée est la première étape de ce processus lol.
Pour vous les utilisateurs vagabonds, j'ai changé mon nom d'hôte assez facilement dans le fichier Vagrant en utilisant l'option config.vm.hostname
. Mais bien sûr, la question est encore totalement légitime.
je peux exécuter manuellement docker images
ou docker ps
sur chaque noeud pour déterminer quel magasin de noeud de l'image attendue et/ou est actuellement en cours d'exécution qui conteneur (le nom du conteneur serait une concaténation de l'identificateur de tâche et le nom de la tâche, séparés par un point). Mais c'est lourd.
Je pourrais également lister tous les nœuds avec leurs ID en utilisant docker node ls
et ensuite chasser la tâche pour chaque nœud, par exemple en utilisant docker node ps 7b
("7b" est les deux premières lettres dans un de mes ID de nœud). Mais c'est trop lourd et au mieux, je vais "seulement" apprendre l'ID du nœud et non l'IP. Mais, je peux trouver l'adresse IP en utilisant un ID de nœud avec une commande comme ceci: docker inspect 7b --format '{{.Status.Addr}}'
. Obtenir directement l'adresse IP n'est donc pas une exigence stricte et pour un moment - quand j'ai compris cela - je pensais que trouver un identifiant de nœud pour un ID de tâche donné serait beaucoup plus facile!
Mais non. Même cela semble être impossible? Comme indiqué précédemment, docker service ps
ne me donne pas l'ID de nœud. Le docs pour la commande dit que l'espace réservé .Name
devrait me donner le "Node ID" mais c'est faux.
Jusqu'à ce moment, je dois avoir essayé un milliard de hacks différents.
Une chose en particulier que je trouve inquiétant est que la docs pour la commande docker node ps
indique expressément qu'il peut être utilisé pour « tâches de la liste en cours d'exécution sur un ou plusieurs noeuds » (mettre l'accent sur le mien). Mais si je fais ceci: docker node ps vagrant
Je reçois un message d'erreur que le nom d'hôte est ambigu car il résout à plus d'un nœud! lol n'est pas si drôle (même sans utiliser les noms d'hôte, je n'ai pas eu cette commande pour travailler sur la liste des tâches sur plusieurs nœuds). Pas que cela ait de l'importance, car docker node ps
tout comme docker service ps
ne produit même pas d'ID de noeud et les docs pour ces deux commandes reposent sur le fait de pouvoir le faire.
Donc là vous l'avez. Je me demande s'il y a quelque chose en face de moi qui me manque ou si le monde entier se fie à des noms d'hôtes uniques? C'est comme si je devais manquer quelque chose d'évident. Sûrement ce produit si populaire Docker doit être en mesure de fournir un moyen de trouver un ID de nœud ou IP de nœud donné un ID de tâche? hmm.
Je suis sous Docker version 17.06.2.