# MANUAL TÉCNICO - HEALTHCHECKS E SCRIPTS AUTOMATIZADOS NO DOCKER **Código:** ITGINF 0011/26 | **Classificação:** RESTRITO **Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} ## 1. HISTÓRICO DE REVISÃO > ⚠️ **REGRA DE OURO:** > 1. **Autor:** João Pedro Toledo Gonçalves. > 2. **Descrição:** Criação do documento. | Data | Versão | Descrição | Autor | | :--- | :--- | :--- | :--- | | {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | ## 2. OBJETIVO Implementar verificações de saúde (Healthchecks) para auto-cura de aplicações e configurar tarefas agendadas (Cron) de forma compatível com conteineres. ## 3. PRÉ-REQUISITOS - [ ] Conhecimento de Dockerfile e Docker Compose. ## 4. PASSO A PASSO (EXECUÇÃO) **Etapa 1: Definindo HEALTHCHECK no Dockerfile** > ℹ️ **NOTA:** O Docker executa esse comando periodicamente. Se falhar X vezes, marca o container como `unhealthy`. 1. Edite seu `Dockerfile`. 2. Adicione a instrução (exemplo para web server): ```dockerfile HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/ || exit 1 ``` **Etapa 2: Definindo HEALTHCHECK no Compose** 1. No `docker-compose.yml`, você pode sobrescrever ou definir: ```yaml version: '3.8' services: web: image: nginx healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3 ``` **Etapa 3: Scripts Agendados (Cron)** > ⚠️ **IMPORTANTE:** Conteineres devem ter UM processo principal. Rodar `cron` junto com `apache` no mesmo container é má prática ("Fat Container"). **Abordagem A: Container Dedicado (Sidecar)** 1. Crie um container pequeno (Alpine) só para rodar o script e sair. 2. Agende a execução desse container pelo `cron` do **HOST**. ```bash # No crontab do HOST (crontab -e) # Roda backup do banco postgres todo dia as 03:00 0 3 * * * docker exec meu-postgres pg_dumpall > /backups/db.sql ``` **Abordagem B: Ofelia (Job Scheduler for Docker)** 1. Use uma imagem especializada que escuta events do Docker. ```yaml services: ofelia: image: mcuadros/ofelia:latest depends_on: - web command: daemon --docker volumes: - /var/run/docker.sock:/var/run/docker.sock web: image: my-app labels: ofelia.enabled: "true" ofelia.job-exec.datecron.schedule: "@every 10s" ofelia.job-exec.datecron.command: "echo 'Backup process...'" ``` ## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING) **Problema 1: Container sempre em `starting`** * **Causa:** O healthcheck nunca passa com sucesso. * **Solução:** 1. Rode o comando do healthcheck manualmente: `docker exec -it [ID] curl ...`. 2. Verifique se o `curl`/`wget` está instalado na imagem. **Problema 2: Cron dentro do container não roda** * **Causa:** Variáveis de ambiente não passam automaticamente para o cron. * **Solução:** Sempre use caminhos absolutos nos scripts e carregue as variáveis se necessário. ## 6. VALIDAÇÃO FINAL - [ ] `docker ps` mostra status `(healthy)`? - [ ] O comando agendado foi executado no horário previsto?