Я ищу способ масштабирования своих контейнеров, сохраняя при этом предсказуемые IP-адреса для каждого из них. Например, у меня есть следующий файл docker -compose.yaml с произвольным изображением. У него фиксированный IP-адрес, работающий в определенной сети:
например,
version: '3'
services:
my_postgres_db:
image: postgres:9.6.16-alpine
networks:
static-network:
ipv4_address: 172.20.128.2
networks:
static-network:
ipam:
config:
- subnet: 172.20.0.0/16
Я запускаю следующие команды:
docker-compose up -d
docker-compose scale my_postgres_db=4
И получаю следующие ошибки:
Creating and starting root_my_postgres_db_2 ... error
Creating and starting root_my_postgres_db_3 ... error
Creating and starting root_my_postgres_db_4 ... error
ERROR: for root_my_postgres_db_2 Cannot start service my_postgres_db: Address already in use
ERROR: for root_my_postgres_db_3 Cannot start service my_postgres_db: Address already in use
ERROR: for root_my_postgres_db_4 Cannot start service my_postgres_db: Address already in use
Это понятно, так как я пытаюсь вызвать несколько контейнеров, использующих один и тот же фиксированный IP-адрес.
Однако есть ли способ масштабирования контейнеров, при этом зная IP-адреса на что они будут бежать? Я могу масштабировать без фиксированного IP-адреса, но мне нужно связаться с контейнером, не проверяя вручную, какой у него IP-адрес.
Я начинаю больше двигаться в сторону Kubernetes. Я знаю, что у вас могут быть Deployments, которые содержат несколько «реплик» контейнеров, существенно масштабируя и группируя их в одну концепцию. Затем мы можем связаться с Развертыванием по одному IP / порту с помощью Сервиса.
Мне интересно, есть ли способ сделать это, используя только Docker / Docker Compose?