Accès au terminal
Un shell interactif dans le conteneur en marche d'une application, depuis le navigateur ou depuis le serveur, et un terminal de l'hôte pour les administrateurs.
Terminal d'une application
L'onglet Terminal d'une application ouvre un shell dans son conteneur en marche, par un WebSocket relié à docker exec avec un TTY.
- Ouvrez l'application et allez dans l'onglet Terminal.
- Choisissez le shell :
sh (auto),bash,ash (Alpine)ouzsh. Le shell doit exister dans l'image. - Cliquez sur Connecter. Déconnecter met fin à la session ; fermer l'onglet aussi.
- Le shell tourne avec l'utilisateur du conteneur, dans son répertoire de travail, avec les variables d'environnement de l'application, secrets compris.
- Les modifications de fichiers hors d'un volume monté disparaissent au déploiement suivant, comme avec le gestionnaire de fichiers.
- Le tableau de bord se connecte au conteneur principal. Pour une application composée de plusieurs services, le WebSocket
/api/v1/apps/<id>/terminalaccepte un paramètreservice.
En ligne de commande
sh0 ssh <app> [commande] exécute une commande dans le conteneur de l'application, ou /bin/sh si aucune n'est donnée (sortie réelle) :
$ sh0 ssh my-api ls /app
[*] Connecting to my-api (a17f99c5c4ac)...
server.js
$ sh0 ssh my-api # opens /bin/sh in the containersh0 ssh ne passe pas par l'API : il trouve le conteneur par son étiquette et lance docker exec -it sur la machine où tourne la CLI. Il ne fonctionne donc que sur le serveur sh0 lui-même, pour un utilisateur autorisé à se servir de Docker, et dans un vrai terminal (sinon : « cannot attach stdin to a TTY-enabled container because stdin is not a terminal »). Il n'atteint pas les applications placées sur un nœud distant. Depuis votre ordinateur, utilisez l'onglet Terminal.Terminal de l'hôte
Paramètres, Host Access donne un terminal sur le serveur lui-même, hors de tout conteneur, ainsi qu'un explorateur de fichiers de l'hôte. Le shell tourne avec les droits du service sh0, c'est-à-dire root sur une installation standard.
Bases de données
Les serveurs de bases de données n'ont pas de terminal propre dans sh0 v1.10.2. Pour lancer psql, mysql ou redis-cli, ouvrez le terminal de l'hôte (ou connectez-vous au serveur en SSH) et utilisez docker exec sur le conteneur de la base :
docker ps --format '{{.Names}}' | grep <database-name>
docker exec -it <container> psql -U <user> <database>Qui peut ouvrir un shell
- Terminal d'une application -- rôle developer sur le projet de l'application.
- Terminal de l'hôte -- rôle owner ou admin.
- Clés d'API -- les deux shells sont refusés aux clés dont la portée n'est pas
admin. - Révocation -- si l'accès de l'utilisateur est retiré pendant une session, la session est fermée.
Limites
- L'application doit tourner : une application arrêtée n'a pas de conteneur.
- On ne peut pas entrer dans les images sans shell (distroless, scratch).
- L'onglet Terminal fonctionne pour les applications d'un nœud distant, par la connexion du nœud ;
sh0 ssh, non. - Les commandes tapées dans un shell ne sont pas enregistrées par sh0.