Могу ли я создать docker-compose.yaml, который создает только сети? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть набор файлов docker-compose, которые создают сервисы и пользовательские сети. Некоторые файлы compose относятся к сетям в других.

Например:

version: '2.2'
services:
  (...)


volumes:
  (...)

networks:
  management:
    driver: macvlan
    driver_opts:
      parent: enp1s0.10 
    ipam:
      config:    
      - subnet: 192.168.10.0/24
  home:
    driver: macvlan
    driver_opts:
      parent: enp1s0
    ipam:
      config:
      - subnet: 192.168.3.0/24
        gateway: 192.168.3.1

Этот файл compose создает пару служб и две сети.

Теперь у меня естьдругой файл создания, который также использует одну из этих сетей и создает другую собственную:

version: '3'
services:
  (...)

networks:
  home:
    external:
      name:               my_other_service_home
  iot:
    driver: macvlan
    driver_opts:
      parent: enp1s0.12
    ipam:
      config:
      - subnet: 192.168.12.0/24

Для ясности я бы предпочел создать все сети в отдельном файле. А затем просто называйте их по имени как внешние сети в других файлах компоновки.

Но это не сработало:

version: '2'

networks:
  iot:
    driver: macvlan
    driver_opts:
      parent: enp1s0.12
    ipam:
      config:
      - subnet: 192.168.12.0/24
  management:
    driver: macvlan
    driver_opts:
      parent: enp1s0.10
    ipam:
      config:
      - subnet: 192.168.10.0/24
  home:
    driver: macvlan
    driver_opts:
      parent: enp1s0
    ipam:
      config:
      - subnet: 192.168.3.0/24
        gateway: 192.168.3.1

Файл был принят без ошибок, но я только что получилсообщение о том, что сети не использовались и, следовательно, не созданы.

Есть ли лучший подход?

1 Ответ

0 голосов
/ 03 ноября 2019

Как насчет создания фиктивной службы в вашем файле networks.yml, которая ничего не делает и немедленно завершает работу?

Что-то вроде этого:

Создание сетей

# networks.yml
version: '3.7'

services:
  dummy:
    image: alpine
    networks: [hello, sky]

networks:
  sky:
    name: skynet

  hello:
    name: hellonet

Создать службу (ы)

# service.yml
version: '3.7'

services:
  service:
    image: alpine
    networks: [sky]

networks:
  sky:
    external:
      name: skynet

Выполнить

$ docker-compose -f networks.yml up
$ docker-compose -f service.yml up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...