Acceso a la terminal
Un shell interactivo dentro del contenedor en marcha de una aplicación, desde el navegador o desde el servidor, y una terminal del host para los administradores.
Terminal de una aplicación
La pestaña Terminal de una aplicación abre un shell dentro de su contenedor en marcha, mediante un WebSocket conectado a docker exec con TTY.
- Abra la aplicación y vaya a la pestaña Terminal.
- Elija el shell:
sh (auto),bash,ash (Alpine)ozsh. El shell debe existir en la imagen. - Haga clic en Conectar. Desconectar termina la sesión; cerrar la pestaña también.
- El shell se ejecuta con el usuario del contenedor, en su directorio de trabajo, con las variables de entorno de la aplicación, secretos incluidos.
- Los cambios en archivos fuera de un volumen montado desaparecen en el siguiente despliegue, como con el gestor de archivos.
- El panel se conecta al contenedor principal. En una aplicación compuesta por varios servicios, el WebSocket
/api/v1/apps/<id>/terminaladmite un parámetroservice.
Desde la CLI
sh0 ssh <app> [comando] ejecuta un comando en el contenedor de la aplicación, o /bin/sh si no se indica ninguno (salida real):
$ sh0 ssh my-api ls /app
[*] Connecting to my-api (a17f99c5c4ac)...
server.js
$ sh0 ssh my-api # opens /bin/sh in the containersh0 ssh no pasa por la API: encuentra el contenedor por su etiqueta y ejecuta docker exec -it en la máquina donde se ejecuta la CLI. Por tanto, solo funciona en el propio servidor sh0, para un usuario con permiso para usar Docker y en una terminal real (si no: «cannot attach stdin to a TTY-enabled container because stdin is not a terminal»). No alcanza las aplicaciones ubicadas en un nodo remoto. Desde su propio equipo, use la pestaña Terminal.Terminal del host
Configuración, Host Access ofrece una terminal en el propio servidor, fuera de cualquier contenedor, y un explorador de archivos del host. El shell se ejecuta con los permisos del servicio sh0, que es root en una instalación estándar.
Bases de datos
Los servidores de bases de datos no tienen terminal propia en sh0 v1.10.2. Para ejecutar psql, mysql o redis-cli, abra la terminal del host (o conéctese al servidor por SSH) y use docker exec en el contenedor de la base de datos:
docker ps --format '{{.Names}}' | grep <database-name>
docker exec -it <container> psql -U <user> <database>Quién puede abrir un shell
- Terminal de una aplicación -- rol developer en el proyecto de la aplicación.
- Terminal del host -- rol owner o admin.
- Claves de API -- ambos shells se rechazan a las claves cuyo alcance no es
admin. - Revocación -- si se retira el acceso del usuario con una sesión abierta, la sesión se cierra.
Limitaciones
- La aplicación debe estar en marcha: una aplicación detenida no tiene contenedor.
- No se puede entrar en imágenes sin shell (distroless, scratch).
- La pestaña Terminal funciona con aplicaciones de un nodo remoto, a través de la conexión del nodo;
sh0 ssh, no. - sh0 no registra los comandos escritos en un shell.