environment:
VIRTUAL_HOST: b.localhost
Тут просто передается переменная VIRTUAL_HOST, которая далее должна использоваться в dockerfile для передачи значения переменной внутрь контейнера при помощи ARG. Далее переменная должна фигурировать в скриптах для настройки окружения, иначе она просто объявлена, но не используется. Т.е. это не верное направление мысли.
Вообще, порты это не про DNS.
Если надо обращаться к контейнеру из других контейнеров, то следует указывать имя
cod
, т.е. имя сервиса в docker-compose файле.
Если надо обращаться из материнской системы, то сделайте запись в /etc/hosts:
127.0.0.1 b.localhost
Если требуется обращаться извне (по отношению к материнской системе), то надо настроить DNS.