Uma TUI escrita em Go para observar, diagnosticar e operar ambientes Docker em servidores Linux — do Engine local ao cluster Swarm.
Site oficial ↗ • Documentação ↗ • Instalar ↗ • Releases ↗
Visão geral • Funcionalidades • Instalação • Uso • Segurança • Limitações
O DockTop conecta-se diretamente à API do Docker Engine e organiza containers, imagens, volumes, redes, eventos e recursos Swarm em uma interface orientada ao teclado.
Não há servidor web, banco de dados ou agente adicional. A distribuição oficial
consiste em um único binário para Linux amd64 ou arm64, com suporte ao socket
Docker local e a endpoints remotos com TLS.
- Security Audit somente leitura para containers;
- Apply Hardening Custom com seleção explícita de controles;
- comparação antes/depois e confirmação pelo nome do container;
- backup do container original e rollback automático em caso de falha;
- avaliação de privilégios, capabilities, mounts, namespaces e limites;
- suporte a seccomp, AppArmor,
no-new-privileges,tmpfse usuário não-root; - proteção contra recriação direta de containers Compose e tasks Swarm;
- interface e mensagens disponíveis em Português, Inglês e Espanhol.
Important
A auditoria analisa a configuração de runtime observável. Ela não substitui
uma análise de vulnerabilidades da imagem e não garante compatibilidade das
remediações. Em ambientes críticos, comece com docktop --read-only.
| Área | Recursos disponíveis |
|---|---|
| Dashboard | Informações do Engine, CPU, memória e resumo dos recursos |
| Containers | Métricas, criação, start, stop, restart, pause e remoção |
| Atualização | Atualização de imagem, recriação do container e rollback |
| Diagnóstico | Logs sob demanda, inspect, processos e shell interativo |
| Imagens | Listagem local, pull com progresso e pesquisa no Docker Hub |
| Volumes e redes | Listagem, criação e remoção |
| Docker Swarm | Serviços, tasks, nodes, stacks e scale de serviços replicated |
| Eventos | Janela recente de eventos do Docker Engine |
| Segurança | Read-only, confirmações, Security Audit e Apply Hardening Custom |
| Auditoria local | JSONL, sanitização, rotação e permissões restritas |
| Interface | Temas persistentes, i18n, teclado e mouse opcional |
O endpoint conectado é classificado automaticamente:
| Endpoint | Comportamento |
|---|---|
| Docker standalone | Exibe e opera recursos do Engine local |
| Swarm worker | Exibe recursos locais e limita operações de cluster |
| Swarm manager | Disponibiliza serviços, tasks, nodes, stacks e plano de controle |
sh -c "$(curl -fsSL https://docktop.dev/docktop.sh)"O instalador:
- detecta Linux
amd64ouarm64; - consulta a release oficial mais recente;
- valida o binário com SHA-256;
- instala o executável;
- oferece configuração de contexto remoto TLS;
- pode ativar a verificação diária de atualizações.
O destino padrão depende do usuário:
| Execução | Destino |
|---|---|
| root | /usr/local/bin/docktop |
| usuário comum | ~/.local/bin/docktop |
| personalizada | Valor de DOCKTOP_INSTALL_DIR |
Para instalação não interativa:
DOCKTOP_YES=1 sh -c "$(curl -fsSL https://docktop.dev/docktop.sh)"Para revisar o instalador antes de executar:
curl -fsSL https://docktop.dev/docktop.sh -o docktop.sh
less docktop.sh
sh docktop.shgit clone https://github.com/gustavoohrodrigues/docktop.git
cd docktop
go test ./...
go build -o docktop ./cmd/docktop
./docktopPara instalar o build local no sistema:
sudo install -Dm755 docktop /usr/local/bin/docktop
docktop --versionPor padrão, o DockTop usa:
unix:///var/run/docker.sock
Confirme o acesso antes de iniciar:
docker info
docktopSe o usuário precisar acessar o socket pelo grupo docker:
sudo usermod -aG docker "$USER"Encerre a sessão e entre novamente após alterar os grupos.
Warning
Acesso ao grupo docker equivale, na prática, a privilégios de root no host.
# Contexto padrão
docktop
# Bloquear operações de escrita
docktop --read-only
# Selecionar contexto, tema ou idioma
docktop --context production-manager
docktop --theme nord
docktop --language en-US
# Configuração alternativa
docktop --config /etc/docktop/config.yaml
# Desabilitar mouse
docktop --no-mouseConsulte todas as opções:
docktop --help| Tecla | Ação |
|---|---|
Tab / Shift+Tab |
Alternar entre áreas |
← / → |
Navegar entre módulos |
↑ / ↓ ou j / k |
Navegar em listas |
PgUp / PgDn ou Ctrl+U / Ctrl+D |
Rolar uma página |
g / G |
Ir ao primeiro ou último item |
Enter |
Abrir detalhes ou confirmar |
Esc |
Fechar modal ou retornar |
/ |
Pesquisa contextual |
r |
Atualizar a tela |
R |
Alternar auto-refresh |
x |
Reiniciar o container selecionado |
u |
Atualizar a imagem do container |
a |
Executar Security Audit somente leitura |
H |
Abrir Apply Hardening |
t |
Trocar tema |
L |
Selecionar idioma |
? / F1 |
Abrir ajuda contextual |
q |
Sair |
Os atalhos disponíveis no contexto atual também aparecem no rodapé da TUI.
O arquivo padrão fica em:
~/.config/docktop/config.yaml
Exemplo com socket local:
default_context: local
contexts:
local:
host: unix:///var/run/docker.sock
theme: dark-ops
language: pt-BR
refresh_interval: 3s
read_only: false
mouse_enabled: true
telemetry_enabled: falseExemplo de endpoint remoto com TLS:
default_context: production-manager
contexts:
production-manager:
host: tcp://docker-manager.example.net:2376
description: Manager Swarm de produção
tls:
enabled: true
ca_file: /home/admin/.docker/ca.pem
cert_file: /home/admin/.docker/cert.pem
key_file: /home/admin/.docker/key.pemO DockTop também considera DOCKER_HOST, DOCKER_CONTEXT e
DOCKER_TLS_VERIFY quando aplicável. Consulte
config.example.yaml para todas as opções.
As operações disponíveis dependem do endpoint. Workers não recebem ações que exigem o plano de controle. Em managers, o DockTop apresenta serviços, tasks, nodes e stacks, além das ações implementadas para esses recursos.
Alterações sensíveis respeitam o modo --read-only, a política de ações
perigosas e as confirmações digitadas.
Na tela Containers, selecione um container e pressione a.
A auditoria usa apenas ContainerInspect: não inicia o container, não executa
processos dentro dele e não altera sua configuração. Os achados são
classificados como Critical, High, Medium, Low ou Informational.
As regras atuais verificam, entre outros pontos:
- execução como root e modo privilegiado;
no-new-privilegese Linux capabilities;- filesystem raiz gravável;
- mounts sensíveis, socket Docker e devices;
- namespaces host PID, IPC, network e user;
- limites de CPU, memória, swap, PIDs e
nofile; - portas publicadas e health check;
- seccomp, AppArmor e SELinux;
- possíveis secrets em variáveis de ambiente;
- referências mutáveis de imagem;
- identificação de Docker Compose e Swarm.
Valores de variáveis que aparentam conter credenciais são substituídos por
[REDACTED].
Em um container standalone, pressione H. O fluxo:
- inspeciona novamente o container;
- mostra controles já aplicados, ausentes ou parciais;
- não seleciona controles silenciosamente;
- permite selecionar itens com
Espaço; - apresenta valores atuais, propostas e riscos de compatibilidade;
- gera um diff antes/depois;
- exige confirmação pelo nome exato do container;
- preserva o original como backup;
- cria e valida o substituto;
- restaura o original se criação, startup ou validação falhar.
O backup usa o formato:
<nome>.docktop-before-hardening-<timestamp>
O backup não é removido automaticamente após sucesso.
Controles disponíveis na v0.3.7:
no-new-privileges;- desabilitar privileged mode;
- drop de todas as Linux capabilities;
- filesystem raiz somente leitura;
- usuário não-root
65532:65532; - limites de CPU, memória, swap, PIDs e
nofile; - namespaces privados de PID, IPC e rede;
- remoção do socket Docker e de device mappings;
- seccomp padrão e AppArmor
docker-default; - remoção do user namespace do host;
tmpfsrestrito para/tmpe/run;- conversão de bind mounts sensíveis para somente leitura;
- remoção explícita de portas publicadas.
Warning
Containers gerenciados por Docker Compose e tasks de Docker Swarm não podem receber hardening por recriação direta. Essa proteção evita divergência da configuração declarativa.
- arquivo padrão:
~/.local/share/docktop/audit.jsonl; - permissões
0600no arquivo e0700no diretório; - sanitização de valores sensíveis;
- rotação e retenção configuráveis;
- credenciais TLS não são registradas.
Quando ativada durante a instalação, a verificação de atualizações é carregada pelo perfil do shell no máximo uma vez por dia. O DockTop consulta a release oficial, informa a versão disponível e pede confirmação antes de atualizar.
Para desabilitar a verificação:
export DOCKTOP_NO_UPDATE_CHECK=1cmd/docktop CLI e ciclo de vida
internal/app Composição da aplicação
internal/config Configuração e contextos
internal/docker Integração com Docker Engine
internal/i18n Traduções e localização
internal/jobs Operações em background
internal/audit Auditoria local
internal/security Regras de auditoria e hardening
internal/registry Integração com registries
internal/theme Temas e cores semânticas
internal/ui Estado e renderização Bubble Tea
internal/utils Utilidades e sanitização
data/themes Temas distribuídos
docs/assets Recursos da documentação
Bubble Tea UI → interface Engine → Docker SDK → Docker Engine
gofmt -w $(find cmd internal -name '*.go')
go mod tidy
go test ./...
go test -race ./...
go build -o docktop ./cmd/docktopOu:
make test
make build
make run- Linux
amd64; - Linux
arm64; - Docker Engine por socket Unix;
- Docker Engine remoto por TCP/TLS;
- Docker standalone;
- Docker Swarm worker e manager.
- Balanced, Strict, Restore Previous Configuration, Compose overrides, Trivy, image hardening, SBOM e scan history ainda não estão disponíveis.
- O backup anterior é preservado, mas o histórico versionado e a ação Restore Previous Configuration ainda não foram implementados.
- A auditoria é estática e não executa o workload.
- Logs são carregados sob demanda, sem follow contínuo.
- O shell interativo usa o Docker CLI para controlar o raw TTY.
- Update avançado, rollback e remoção de serviços Swarm não estão expostos.
- Promote e demote de managers ainda não estão disponíveis na TUI.
- Stacks são agrupadas e inspecionadas, mas deploy e remoção não estão implementados.
- Events usa uma janela recente, não um stream persistente.
Permissão negada no socket Docker
id
ls -l /var/run/docker.sock
docker infoDocker daemon indisponível
sudo systemctl status docker
sudo systemctl start dockerFalha no contexto remoto TLS
Verifique DNS, CA, certificado do cliente, chave privada, permissões dos arquivos e se o daemon está escutando no endpoint configurado.
Contribuições são bem-vindas. Consulte o guia de contribuição para preparar o ambiente, enviar mudanças e executar as validações do projeto.
Falhas de segurança devem seguir a política de segurança.
Um projeto da Orqly.
CONTRIBUIDOR Emanuel Sena @EmanuelSena101 |
CONTRIBUIDOR Otávio @otaviozin |
CONTRIBUIDOR Lucas Roveri @Lucas-V-Roveri |
CRIADOR E MANTENEDOR Gustavo Rodrigues @gustavoohrodrigues |
CONTRIBUIDOR Matheus Silva @matjsz |
Distribuído sob a licença MIT.
By Orqly.