Часто эту задачу решают через external network.
Создаеш еще одну сеть через CLI
docker create network net-private
Потом добавляеш ее в docker-compose.yml как внешнюю, потом в томже компопозе добавляеш ее к сервису которые должны между собой взаимодействовать.
После всех манипуляций контейнеры будут видеть друг-друга по именам.
Вот пример двух композов, приложение с базой и pgadmin. Pgadmin это вебка для управления базой, что бы они могли взаимодействовать мы объединяем их в одну сеть net-private.
version: '3.8'
services:
pgadmin:
image: dpage/pgadmin4
restart: unless-stopped
environment:
PGADMIN_DEFAULT_EMAIL: "admin@example.com" # замініть на свою email-адресу
PGADMIN_DEFAULT_PASSWORD: "qwerty12345" # замініть на свій пароль
ports:
- "5050:80"
networks:
- net-private
networks:
net-private:
external: true
version: '3.8'
services:
web:
image: my/app
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./data:/mnt/data
database:
image: db/psql
restart: unless-stopped
networks:
- net-private
networks:
net-private:
external: true