docker compose: rede entre serviços e ordem de subida
Pergunta
No docker compose, como um serviço acha o outro pela rede, e por que `depends_on` não garante que o outro está pronto?
Resposta esperada
O compose cria uma rede bridge pro projeto e cada serviço fica acessível pelos outros pelo NOME do serviço como hostname (`postgres://db:5432`, não `localhost`). A resolução é por DNS interno do Docker. `depends_on` controla a ORDEM de INÍCIO (o Docker sobe `db` antes de `api`), mas 'iniciado' não é 'pronto' — o processo do Postgres pode levar segundos pra aceitar conexão depois do container subir, e a `api` já tentou conectar e falhou. Soluções: `depends_on` com `condition: service_healthy` (exige um `healthcheck` definido no serviço `db`), ou um script de espera (`wait-for-it`, retry com backoff na própria app na inicialização) — a app resiliente que reconecta é a solução mais robusta e serve também pra quando o banco cai em produção.
Por que perguntam isso
Pergunta pleno de Docker. O 'iniciado != pronto' é a pegadinha clássica. Sinal forte: 'app que reconecta serve pra prod também'.