Como garantir um atraso na inicialização do serviço no Docker Compose para que ele não aceite pedidos até estar totalmente preparado para funcionar?
sobes.tech IA
Resposta da IA
Para que um serviço no Docker Compose não aceite pedidos até estar completamente pronto, normalmente usa-se o mecanismo de "healthcheck" e um atraso de início com scripts de espera.
Abordagens principais:
-
Healthcheck no docker-compose.yml — define um comando que verifica a prontidão do serviço (por exemplo, uma requisição à API ou uma verificação da porta). Outros serviços podem depender do estado de saúde.
-
Script de espera (wait-for-it, dockerize, ou próprio) — no entrypoint do serviço, adiciona-se um script que espera que o recurso necessário (por exemplo, a base de dados) esteja acessível antes de iniciar o processo principal.
Exemplo de healthcheck no docker-compose.yml:
services:
app:
image: myapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 5
Ou usar um script de espera no Dockerfile:
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./start-app.sh"]
Assim, o serviço não começará a aceitar pedidos até estar pronto.