Acesso ao terminal
Um shell interativo dentro do contêiner em execução de um app, pelo navegador ou pelo servidor, e um terminal do host para administradores.
Terminal de um app
A aba Terminal de um app abre um shell dentro do contêiner em execução, por um WebSocket ligado ao docker exec com TTY.
- Abra o app e vá até a aba Terminal.
- Escolha o shell:
sh (auto),bash,ash (Alpine)ouzsh. O shell precisa existir na imagem. - Clique em Conectar. Desconectar encerra a sessão; fechar a aba também.
- O shell roda com o usuário do contêiner, no diretório de trabalho dele, com as variáveis de ambiente do app, segredos incluídos.
- Alterações em arquivos fora de um volume montado somem na próxima implantação, como no gerenciador de arquivos.
- O painel se conecta ao contêiner principal. Num app composto por vários serviços, o WebSocket
/api/v1/apps/<id>/terminalaceita um parâmetroservice.
Pela CLI
sh0 ssh <app> [comando] executa um comando no contêiner do app, ou /bin/sh se nenhum for informado (saída 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 não passa pela API: ele encontra o contêiner pelo rótulo e executa docker exec -it na máquina onde a CLI roda. Por isso só funciona no próprio servidor sh0, para um usuário com acesso ao Docker, e num terminal de verdade (caso contrário: “cannot attach stdin to a TTY-enabled container because stdin is not a terminal”). Ele não alcança apps num nó remoto. A partir do seu computador, use a aba Terminal.Terminal do host
Configurações, Host Access oferece um terminal no próprio servidor, fora de qualquer contêiner, e um navegador de arquivos do host. O shell roda com as permissões do serviço sh0, que é root numa instalação padrão.
Bancos de dados
Os servidores de banco de dados não têm terminal próprio no sh0 v1.10.2. Para rodar psql, mysql ou redis-cli, abra o terminal do host (ou entre no servidor por SSH) e use docker exec no contêiner do banco:
docker ps --format '{{.Names}}' | grep <database-name>
docker exec -it <container> psql -U <user> <database>Quem pode abrir um shell
- Terminal de um app -- papel developer no projeto do app.
- Terminal do host -- papel owner ou admin.
- Chaves de API -- os dois shells são recusados para chaves cujo escopo não é
admin. - Revogação -- se o acesso do usuário for removido durante uma sessão, a sessão é encerrada.
Limitações
- O app precisa estar rodando: um app parado não tem contêiner.
- Não é possível entrar em imagens sem shell (distroless, scratch).
- A aba Terminal funciona para apps num nó remoto, pela conexão do nó;
sh0 ssh, não. - Os comandos digitados num shell não são registrados pelo sh0.