Pular para conteúdo

Dozzle

O Dozzle fornece uma interface web para visualizar logs dos containers Docker em tempo real.

Ele não armazena os logs por conta própria. O Dozzle apenas consulta os registros mantidos pelo Docker e os apresenta em uma interface mais amigável.

Nesta VPS, ele é uma ferramenta administrativa não essencial e pode permanecer desligado durante o quiet_mode.

Informações desta VPS

Item Valor
Stack /opt/stacks/infra/compose.yml
Serviço Compose dozzle
Container infra-dozzle-1
Imagem configurada amir20/dozzle:latest
Versão registrada v8.14.6
Versão mais recente verificada v10.6.7
Domínio https://logs.cloud.hometecseg.com
Porta interna 8080
Rede Docker proxy
Volume persistente Não utiliza
Docker Socket /var/run/docker.sock:ro
Healthcheck Não configurado
Operação contínua Não obrigatória

Modo econômico

O Dozzle pode aparecer como parado porque é desligado propositalmente pelo script quiet_mode.sh. O estado Exited (0) indica encerramento normal.

Estado atual

Ver o estado do serviço

docker compose -f /opt/stacks/infra/compose.yml ps -a dozzle

Ver somente containers em execução

docker ps --filter name=infra-dozzle-1

Ver containers ativos ou parados

docker ps -a --filter name=infra-dozzle-1

Ver o estado detalhado

docker inspect infra-dozzle-1 \
  --format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} FinishedAt={{.State.FinishedAt}} OOMKilled={{.State.OOMKilled}}'

Iniciar e parar

Iniciar o Dozzle

docker compose -f /opt/stacks/infra/compose.yml start dozzle

Caso o container não exista:

docker compose -f /opt/stacks/infra/compose.yml up -d dozzle

Parar o Dozzle

docker compose -f /opt/stacks/infra/compose.yml stop dozzle

Reiniciar o Dozzle

docker compose -f /opt/stacks/infra/compose.yml restart dozzle

Recriar o container

docker compose -f /opt/stacks/infra/compose.yml up -d --force-recreate dozzle

Confirmar o estado após iniciar

docker compose -f /opt/stacks/infra/compose.yml ps dozzle

Acesso

Endereço:

https://logs.cloud.hometecseg.com

Testar o domínio

curl -I https://logs.cloud.hometecseg.com

Verificar o DNS

getent hosts logs.cloud.hometecseg.com

Ver detalhes da conexão HTTPS

curl -v https://logs.cloud.hometecseg.com

Serviço desligado

O domínio ficará indisponível enquanto o Dozzle estiver parado pelo modo econômico.

Logs do próprio Dozzle

Ver os últimos 100 registros

docker logs infra-dozzle-1 --tail 100

Acompanhar os logs em tempo real

docker logs -f infra-dozzle-1

Procurar erros

docker logs infra-dozzle-1 2>&1 \
  | grep -Ei "error|fatal|panic|exception"

Procurar avisos

docker logs infra-dozzle-1 2>&1 \
  | grep -Ei "warn|warning"

Ver registros de inicialização

docker logs infra-dozzle-1 2>&1 \
  | grep -Ei "Dozzle version|Connected to Docker|Accepting connections"

Versão

Ver a versão registrada nos logs

docker logs infra-dozzle-1 2>&1 \
  | grep "Dozzle version" \
  | tail -1

Mostrar somente o número da versão

docker logs infra-dozzle-1 2>&1 \
  | grep "Dozzle version" \
  | tail -1 \
  | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+'

Ver a imagem configurada

grep -n "amir20/dozzle" /opt/stacks/infra/compose.yml

Ver a imagem associada ao container

docker inspect infra-dozzle-1 \
  --format '{{.Config.Image}}'

Ver o identificador da imagem utilizada

docker inspect infra-dozzle-1 \
  --format '{{.Image}}'

Versão mais recente disponível

A versão registrada nesta VPS é:

v8.14.6

A versão mais recente verificada no repositório oficial ao criar esta documentação é:

v10.6.7

Portanto, existe uma atualização principal disponível. A versão 10 inclui recursos novos, como alertas e webhooks, além da visualização tradicional de logs. :contentReference[oaicite:0]{index=0}

Informação temporal

O número da versão mais recente muda com o tempo. Sempre verifique os releases oficiais antes de atualizar.

Verificar atualização disponível

Baixar a imagem mais recente

docker pull amir20/dozzle:latest

Esse comando baixa a imagem, mas não recria o container atual.

Ver o identificador da imagem baixada

docker image inspect amir20/dozzle:latest \
  --format '{{.Id}}'

Ver o identificador usado pelo container

docker inspect infra-dozzle-1 \
  --format '{{.Image}}'

Comparar automaticamente

CONTAINER_IMAGE="$(docker inspect infra-dozzle-1 --format '{{.Image}}')" &&
LATEST_IMAGE="$(docker image inspect amir20/dozzle:latest --format '{{.Id}}')" &&
if [ "$CONTAINER_IMAGE" = "$LATEST_IMAGE" ]; then
  echo "Dozzle já utiliza a imagem mais recente baixada."
else
  echo "Existe uma imagem diferente da usada pelo container."
fi

Comparação por imagem

Esse teste compara identificadores de imagem. Ele não interpreta semanticamente os números de versão.

Atualização manual

A documentação oficial recomenda atualizar baixando a nova imagem e recriando o serviço. :contentReference[oaicite:1]{index=1}

Criar backup do Compose

mkdir -p /opt/backups/dozzle
cp /opt/stacks/infra/compose.yml \
  /opt/backups/dozzle/compose-$(date +%Y%m%d-%H%M%S).yml

Criar backup do arquivo de ambiente

cp /opt/stacks/infra/.env \
  /opt/backups/dozzle/env-$(date +%Y%m%d-%H%M%S).bak

Validar o Compose

docker compose -f /opt/stacks/infra/compose.yml config

Baixar a nova imagem

docker compose -f /opt/stacks/infra/compose.yml pull dozzle

Recriar somente o Dozzle

docker compose -f /opt/stacks/infra/compose.yml up -d dozzle

Verificar o estado

docker compose -f /opt/stacks/infra/compose.yml ps dozzle

Verificar os logs

docker logs infra-dozzle-1 --tail 100

Confirmar a versão

docker logs infra-dozzle-1 2>&1 \
  | grep "Dozzle version" \
  | tail -1

Testar o domínio

curl -I https://logs.cloud.hometecseg.com

Atualização pelo script

Existe um script dedicado:

/usr/local/bin/update_dozzle.sh

Ele será revisado e documentado posteriormente na página de scripts.

Visualizar o script

sed -n '1,260p' /usr/local/bin/update_dozzle.sh

Verificar permissões

ls -l /usr/local/bin/update_dozzle.sh

Revisão obrigatória

O script deve ser analisado antes do uso para confirmar se valida o Compose, preserva o estado do quiet_mode, confere a versão e oferece alguma forma de rollback.

Docker Socket

O Dozzle utiliza:

/var/run/docker.sock

A montagem está configurada como somente leitura:

/var/run/docker.sock:/var/run/docker.sock:ro

Confirmar a montagem

docker inspect infra-dozzle-1 \
  --format '{{range .Mounts}}{{println .Type "|" .Source "|" .Destination "|" .RW}}{{end}}'

Verificar as permissões do socket no host

ls -l /var/run/docker.sock

Acesso ao Docker

Mesmo montado como somente leitura, o Docker Socket expõe informações sensíveis sobre containers, imagens, redes e variáveis. O painel deve permanecer protegido.

Porta interna

O Dozzle escuta por padrão na porta:

8080

A documentação oficial também usa a porta 8080 nos exemplos de instalação. :contentReference[oaicite:2]{index=2}

Confirmar a porta exposta

docker inspect infra-dozzle-1 \
  --format '{{json .Config.ExposedPorts}}'

Verificar a porta registrada nos logs

docker logs infra-dozzle-1 2>&1 \
  | grep "Accepting connections" \
  | tail -1

Healthcheck

Atualmente não há healthcheck configurado:

Healthcheck=null

O Dozzle possui um comando próprio de verificação:

dozzle healthcheck

Esse teste consulta o endpoint interno e verifica se o Dozzle consegue alcançar pelo menos um Docker local ou agente remoto. :contentReference[oaicite:3]{index=3}

Testar manualmente dentro do container

Com o Dozzle ativo:

docker exec infra-dozzle-1 dozzle healthcheck

Exemplo de healthcheck para o Compose

healthcheck:
  test: ["CMD", "/dozzle", "healthcheck"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 20s

Alteração futura

O healthcheck acima é uma sugestão. Ele ainda não está configurado no Compose atual e deve ser testado antes de ser incorporado.

Traefik

Ver as labels

docker inspect infra-dozzle-1 \
  --format '{{json .Config.Labels}}'

Verificar a rede proxy

docker network inspect proxy

Confirmar as redes do container

docker inspect infra-dozzle-1 \
  --format '{{json .NetworkSettings.Networks}}'

Ver logs do Traefik

docker logs reverse-proxy-traefik-1 --tail 100

Troubleshooting

Dozzle aparece como parado

Verificar:

docker compose -f /opt/stacks/infra/compose.yml ps -a dozzle

Se foi parado pelo modo econômico:

docker compose -f /opt/stacks/infra/compose.yml start dozzle

Caso o container não exista:

docker compose -f /opt/stacks/infra/compose.yml up -d dozzle

Dozzle inicia e encerra

Verificar:

docker logs infra-dozzle-1 --tail 200
docker inspect infra-dozzle-1 \
  --format 'ExitCode={{.State.ExitCode}} Error={{printf "%q" .State.Error}} OOMKilled={{.State.OOMKilled}}'
docker compose -f /opt/stacks/infra/compose.yml config

Não consegue conectar ao Docker

Verificar o socket:

ls -l /var/run/docker.sock

Verificar a montagem:

docker inspect infra-dozzle-1 \
  --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'

Verificar os logs:

docker logs infra-dozzle-1 --tail 200

Erro 404

docker inspect infra-dozzle-1 \
  --format '{{json .Config.Labels}}'
getent hosts logs.cloud.hometecseg.com
docker logs reverse-proxy-traefik-1 --tail 100

Erro 502 ou Gateway Timeout

docker compose -f /opt/stacks/infra/compose.yml ps dozzle
docker network inspect proxy
docker logs infra-dozzle-1 --tail 100
docker logs reverse-proxy-traefik-1 --tail 100

A porta interna esperada é:

8080

Logs não aparecem

Verificar se o container desejado possui logs:

docker logs NOME_DO_CONTAINER --tail 20

Verificar o driver de logs:

docker inspect NOME_DO_CONTAINER \
  --format '{{.HostConfig.LogConfig.Type}}'

Verificar se o Dozzle está conectado ao Docker:

docker logs infra-dozzle-1 2>&1 \
  | grep "Connected to Docker" \
  | tail -1

Consumo elevado de CPU ou memória

docker stats infra-dozzle-1
docker inspect infra-dozzle-1 \
  --format 'Memory={{.HostConfig.Memory}} NanoCPUs={{.HostConfig.NanoCpus}}'

Boas práticas

  • Manter o Dozzle desligado quando não estiver em uso.
  • Fazer backup do Compose antes de atualizações.
  • Não publicar diretamente a porta 8080.
  • Utilizar o Traefik para acesso externo.
  • Manter o Docker Socket como somente leitura.
  • Proteger o domínio contra acesso não autorizado.
  • Verificar versão e logs após atualizações.
  • Considerar configurar um healthcheck.
  • Revisar update_dozzle.sh antes de utilizá-lo.