Докер: Как контролировать / определять настройки шлюза по умолчанию

Может кто-нибудь пролить свет на то, что с YML-файлом Docker Compose? Все, что я хочу сделать, это иметь возможность контролировать IP-адреса различных контейнеров. Я использую версию 3.1 (но также пробовал 3.3, поскольку я недавно обновился до версии 17.06). В документации сказано:

A full example:

ipam:
  driver: default
  config:
    - subnet: 172.28.0.0/16
Note: Additional IPAM configurations, such as gateway, are only honored for version 2 at the moment.

Когда я делаю это, мне нужна эта подсеть, когда я проверяю сеть. Однако шлюз совершенно другой [см.Примечание: выше], поэтому контейнеры не запускаются. Почему они потеряли способность (на данный момент) в версии 3 для чего-то, что работало в версии 2? Хуже того, почему это не было восстановлено в версии 3.2 или 3.3?

Может быть, я далеко от базы - конечно, не в первый раз! Что для меня наиболее важно: есть ли способ изменить составной файл, чтобы позволить docker stack deploy команда (в Docker Swarm) обеспечить контроль над используемым шлюзом и подсетями?

2 ответа

Решение

Наконец понял это, и я публикую то, что я сделал, в надежде, что это может помочь кому-то еще. Хотя я не знал об этом, когда начинал, чего я действительно хотел?:) ], чтобы сделать, было переопределить настройки по умолчанию docker_gwbridge сеть.

Вот как я это сделал:

docker swarm init     # I am assuming this was already done, this creates the network with default settings
docker swarm leave -f  # only if you did an 'init'
docker network ls      # just to see the docker_gwbridge network
docker network rm docker_gwbridge

# if you never created/initialized a swarm, you can start here
SUBNET=172.19.0.0/16   # my defaults were always 172.18, using 19 only to test that this works
GATEWAY=172.19.0.1
docker network create --subnet=$SUBNET --gateway $GATEWAY \
  -o com.docker.network.bridge.name=docker_gwbridge \
  -o com.docker.network.bridge.enable_icc=false \
  -o com.docker.network.bridge.enable_ip_masquerade=true \ 
  docker_gwbridge
docker swarm init      # now start the swarm
docker network inspect docker_gwbridge   # if you want to see your changes
docker stack deploy --compose-file yourFile.yml YOURSTACKNAME

Теперь все ваши контейнеры запускаются в определенной вами подсети, а также с указанным вами шлюзом.

Конфигурация сети в compose v3:

networks:
  my_network:
    driver: overlay
    ipam:
      driver: default
      config:
      -
        subnet: 172.28.0.0/16

Затем вы можете назначить свои контейнеры этой сети и указать IP

services
    my_service:
        networks:
            my_network:
                 ipv4_address: 172.28.0.100

Для уже определенных сетей используйте:

networks:
  default:
    external:
      name: my-pre-existing-network
Другие вопросы по тегам