exécuter une commande dans le panneau de l'essaim de service
- Initialiser essaim mode:
root@ip-172-31-44-207:/home/ubuntu# docker swarm init --advertise-addr 172.31.44.207 Swarm initialized: current node (4mj61oxcc8ulbwd7zedxnz6ce) is now a manager. To add a worker to this swarm, run the following command:
- Rejoindre le deuxième nœud:
docker swarm join \ --token SWMTKN-1-4xvddif3wf8tpzcg23tem3zlncth8460srbm7qtyx5qk3ton55-6g05kuek1jhs170d8fub83vs5 \ 172.31.44.207:2377
Pour ajouter un gestionnaire de cet essaim, exécutez "docker essaim rejoignez-token manager" et suivez les instructions.
# start 2 services
docker service create continuumio/miniconda3
docker service create --name redis redis:3.0.6
root@ip-172-31-44-207:/home/ubuntu# docker service ls
ID NAME REPLICAS IMAGE COMMAND
2yc1xjmita67 miniconda3 0/1 continuumio/miniconda3
c3ptcf2q9zv2 redis 1/1 redis:3.0.6
Comme indiqué ci-dessus, redis, il se réplique alors que miniconda ne pas semblent être répliqué.
Je fais d'habitude connectez-vous à miniconda conteneur de taper ces commandes:
/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser
Le problème est que docker exec -it XXX bash
commande ne fonctionne pas avec l'essaim de mode.
Le 0 répliques signifie que le conteneur n'a pas pu démarrer. Je vous recommande de configurer un enregistrement du pilote (par exemple, pilote syslog) sur votre démon docker depuis par défaut, il avale toutes les sorties des conteneurs. C'est probablement le redémarrage maintes et maintes fois et vous voulez savoir pourquoi. Si c'est le cas, vous ne serez pas en mesure de s'attacher à elle et de le corriger; vous en aurez besoin pour fixer le panneau de commande de services au lieu de cela, afin de ne pas sortir avec une erreur.
OriginalL'auteur shantanuo | 2016-09-07
Vous devez vous connecter pour publier un commentaire.
Il y a un liner pour accéder instance correspondante du service pour localhost:
Il est testé sur de PowerShell, mais bash devrait être le même. Le oneliner accède à la première instance, mais remplacer " 1 " avec le numéro de l'instance que vous souhaitez accéder à deux endroits pour en obtenir d'autres.
Exemple plus complexe est distribué cas:
Ce script peut être utilisé plus tard comme:
Il exécute bash sur le nœud requis.
concernant le script bash
$ docker service ls ID NAME MODE REPLICAS IMAGE jiecd0kb524e bar replicated 3/3 jwilder/whoami:latest
et quand je l'appelle il$ ./swarm_bash bar 1 Executing in swarmm-agentpublic-31109991000004 bar.1.vj6lqkz4wi03hn7hr6574cipg Host does not exist: "swarmm-agentpublic-31109991000004" Error response from daemon: No such container: bar.1.vj6lqkz4wi03hn7hr6574cipg
puis-je vraiment exec dans l'essaim de mode? L'un liner aussi ne fonctionne pas pour moiBesoins-pas-de tronc et de la tête -n1
J'ai eu une erreur sur le
docker-machine
eval à l'aide d'une récente installation dedocker-ce
mais le reste du script a fonctionné à merveille.Cette réponse ne fait que travailler pour localhost. Si indiqué, peut-être mettre en évidence le fait un peu plus. Cette solution n'est pas de réponse générale à exécuter une commande dans un essaim de service. Pour bash, la valeur par défaut menu fixe TAB achèvement fait le travail sur localhost: docs.docker.com/compose/completion/#bash
OriginalL'auteur user1936595
MODIFIER 2017-10-06:
Aujourd'hui, vous pouvez créer le réseau de superposition avec
--attachable
drapeau pour permettre à n'importe quel conteneur à rejoindre le réseau. Ce est une grande fonctionnalité, car il permet beaucoup de flexibilité.E. g.
Vous êtes de droite, vous ne pouvez pas exécuter
docker exec
sur docker essaim mode de service. Mais vous pouvez encore trouver, le nœud qui exécute le conteneur, puis exécutez exec directement sur le conteneur. E. g.Dans votre cas, vous devez d'abord trouver pourquoi le service ne peut pas obtenir la miniconda conteneur. Peut-être l'exécution de
docker service ps miniconda3
montre quelques messages d'erreur utiles..?OriginalL'auteur ronkot
En utilisant le Support de l'API
Droit maintenant, Docker ne pas fournir une API comme
docker service exec
oudocker stack exec
pour cela. Mais à ce sujet, il existe déjà deux questions relatives à cette fonctionnalité:(Concernant la première question, pour moi, il n'était pas directement clair que cette question traite exactement de ce type de fonctionnalité. Mais Exec pour Essaim a été fermé et marqué comme un double de la Le panneau de service exec question.)
En utilisant le Panneau de démon sur HTTP
Comme mentionné par BMitch sur exécutez le panneau exec à partir de l'essaim de manager, vous pouvez également configurer le démon Docker à l'utilisation de HTTP et de se connecter à chaque nœud sans avoir besoin de ssh. Mais vous devez protéger à l'aide de cette L'authentification TLS qui est déjà intégré dans le Panneau. Ensuite, vous serait en mesure d'exécuter le
docker exec
comme ceci:À l'aide de skopos-plugin-essaim-exec
Il existe un projet github qui prétend résoudre le problème et de fournir la fonctionnalité de liaison le démon docker:
Aussi loin que je peux voir, cela passe par la création d'un autre récipient au même nœud où le conteneur résident à l'endroit où le
docker exec
devrait par exécutée. Sur ce nœud, ce conteneur monte le démon docker socket pour être en mesure d'exécuterdocker exec
localement.Pour plus d'informations, jetez un oeil à: skopos-plugin-essaim-exec
À l'aide de docker essaim aides
Il y a aussi un autre projet appelé docker essaim aides qui semble être plus ou moins un wrapper autour de
ssh
etdocker exec
.Référence:
OriginalL'auteur Murmel
Vous pouvez exécuter des commandes par filtrage nom du conteneur sans avoir besoin de passer l'ensemble de l'essaim conteneur de hachage, juste par le nom du service. Comme ceci:
docker exec $(docker ps -q -f name=servicename) ls
OriginalL'auteur isca
Vous pouvez sauter dans un Essaim de nœud et de la liste des conteneurs docker exécute à l'aide d':
Qui va vous donner le nom de conteneur dans un format similaire à: nomconteneur.1.q5k89uctyx27zmntkcfooh68f
Vous pouvez ensuite l'utilisation de l'option exec pour exécuter des commandes sur:
OriginalL'auteur JP Santana