"server1.docker.company.tld порт 25/tcp и server2.docker.company.tld порт 25/tcp" - при отсутствии возможности разделения запросов, аналогичного заголовку Host в HTTP, эти два сервиса должны резолвиться в разные IP-адреса, либо слушать на разных портах. Либо (но так делают относительно редко) нужна маршрутизация на основании источника. В любом случае - это требует сетевой инфраструктуры.
Что бы "не придумывать каждый раз новый порт", используют инстансы соответствующих сервисов, выставленные наружу и умеющие маршрутизировать запросы уже на уровне приложения. Для HTTP это ингресс, для SMTP - сервер входящей почты и т. д. От этого никуда не денешься.