localhost — это имя хоста (домен)
«Преобразованием» (резрешением, резолвом, resolve) домена в ip адрес занимается DNS.
DNS штука иерархическая и она начинает резолвить с самого хоста (твоей машины или с контейнера) и если не находит на своём уровне идёт дальше по сети.
Саму тонкость почему внутри контейнера docker не резолвится localhost я не скажу, но проблема в том, что внутри контейнера не срабатывает связка localhost->
127.0.0.1