>> frontend имеет адрес допустим localhost:3000
>> api имеет адрес допустим localhost:3001
это они СНАРУЖИ докера имеют такие адреса, а внутри они "service_name:port" , и обращаться друг к другу могут без обращения к внешним (относительно докера) сервисам, просто по именам сервисов. А если надо имена, то в файл docker-compose.yml можно написать alias-ы
Читаем очень внимательно вот этот важный мануал -
https://docs.docker.com/compose/how-tos/networking/