devterview_$ iniciar simulação

docker compose: rede entre serviços e ordem de subida

MédioPlenoOrquestração local

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'.

#docker-compose#rede#depends-on#healthcheck
publicidade

Relacionadas