Docs/ Opérations/ Accès terminal

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.

  1. Ouvrez l'application et allez dans l'onglet Terminal.
  2. Choisissez le shell : sh (auto), bash, ash (Alpine) ou zsh. Le shell doit exister dans l'image.
  3. 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>/terminal accepte un paramètre service.

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) :

Terminal (on the server)
$ sh0 ssh my-api ls /app
[*] Connecting to my-api (a17f99c5c4ac)...
server.js

$ sh0 ssh my-api        # opens /bin/sh in the container
Warning
sh0 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.

Danger
Le terminal de l'hôte, c'est le contrôle total de la machine : chaque application, chaque base de données, chaque secret qu'elle porte. Il est réservé aux rôles owner et admin ; attribuez ces rôles en conséquence.

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 :

Terminal (on the server)
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.