O principal objetivo do Docker Compose é criar um conjunto de contêineres do Docker, que funcionarão como entidades independentes. Por padrão, todos os contêineres terão uma conexão de rede virtual com todos os outros, embora você possa alterar isso se desejar; você obterá esse recurso, pois não especificou uma configuração personalizada.
Cada um dos contêineres receberá um endereço IP virtual dentro da rede virtual configurada pelo Docker. Como eles são dinâmicos, o Docker Compose facilita a criação de entradas DNS internas correspondentes a cada serviço. Portanto, você terá dois contêineres, que podem ser endereçados como
app
e db
respectivamente, de si mesmos ou do outro. Se você tiver o ping instalado, também poderá executar ping nesses nomes, via docker-compose exec
, ou por meio de um shell criado manualmente. Assim, como descobrimos nos comentários, você pode se conectar de
app
para jdbc:postgresql://db:5432/media
, e deve funcionar.