Инструкция EXPOSE информирует Docker о том, что контейнер прослушивает указанные сетевые порты во время выполнения. EXPOSE не делает порты контейнера доступными для хоста. Для этого вы должны использовать флаг -p для публикации диапазона портов.
Именно этим и занимается секция docker-compose.yml ports. Он отображает порт контейнера на хост.