развертывание стека докеров не использует созданную оверлейную сеть

Я создал оверлейную сеть с помощью этой команды:

docker network create --driver overlay --internal --subnet 192.168.0.0/24 test

а затем я попытался развернуть стек с одной службой. yaml-файл стека выглядит так:

---
version: "3.0"
services:
  web1:
    image: "test"
    ports:
       - "12023:22"
    hostname: "ard014-web1"
    networks:
      - test
networks:
  test:
    driver: overlay

Развертываю стек командой:

docker stack deploy -c test.yaml test

если я проверяю сети с помощью docker network ls, я обнаруживаю, что новая оверлейная сеть создается с именем test_test, и контейнер использует эту сеть вместо уже созданной. это ожидаемое поведение? Я хочу, чтобы стек использовал сеть, которую я создал вручную, вместо создания новой сети, потому что я хочу контролировать диапазон IP CIDR, используемый оверлейной сетью. как я могу этого добиться?


person tkyass    schedule 22.08.2017    source источник


Ответы (1)


Чтобы использовать существующую сеть, определите ее как «внешнюю»:

version: "3.0"
services:
  web1:
    image: "test"
    ports:
       - "12023:22"
    hostname: "ard014-web1"
    networks:
      - test
networks:
  test:
    external: 
      name: test

Подробнее здесь: https://docs.docker.com/compose/compose-file/#external-1

person BMitch    schedule 22.08.2017
comment
Я заметил, что могу использовать это в уже созданных контейнерах, чтобы изменить свою сеть. Я получил сообщение об ошибке Ответ от демона об ошибке: ошибка rpc: code = 2 desc = изменение сети в службе не поддерживается - person tkyass; 31.08.2017
comment
@tkyass Для этого есть технические причины, возможно, услуга VIP не будет работать при непрерывном обновлении. Исправление состоит в том, чтобы просто удалить существующую службу при внесении подобных изменений. - person BMitch; 31.08.2017