Если контейнеры запущены через docker run без указания сети, то они уже в одной сети и могут обращаться друг к другу используя имя контейнера в качестве имени хоста.
Если контейнеры запускаются через docker-compose, то, по умолчанию, на каждый docker-compose.yml файл создаётся отдельная сеть. Это надо учитывать если сервисы запускаются через разные файлы. В этом случае сеть стоит создать вручную и прописать её использование во всех docker-compose.yml файлах.
При запуске через docker-compose в качестве имени хоста контейнера используется не имя контейнера, а имя сервиса.
В обоих случаях имя хоста можно переопределить через опцию hostname. В обоих случаях порты пробрасывать не надо.