Подключение к нескольким сетям - одна существующая - PullRequest
0 голосов
/ 21 января 2019

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

Я нашел эти документы и получил следующий конфиг:

haproxy:
        container_name: haproxy
        links:
            - 'mysql1:mysql1cl'
            - 'mysql2:mysql2cl'
        volumes:
            - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
        ports:
            - '33060:3306'
            - '38080:8080'
        image: 'haproxy:latest'
        networks:
            - athenanet
            - external:
                name: bridge

Но это дает мне следующую ошибку:

services.haproxy.networks contains {"external": "bridge"}, which is an invalid type, it should be a string

Поэтому я попытался использовать сеть по умолчанию как есть, и в результате получил следующую конфигурацию:

haproxy:
        container_name: haproxy
        links:
            - 'mysql1:mysql1cl'
            - 'mysql2:mysql2cl'
        volumes:
            - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
        ports:
            - '33060:3306'
            - '38080:8080'
        image: 'haproxy:latest'
        networks:
            - athenanet
            - bridge

Но тогда я получаю следующую ошибку:

ERROR: Service "haproxy" uses an undefined network "bridge"

Есть ли у кого-то соответствующая конфигурация для подключения как к определенной сети, так и к существующей сети?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я вижу несколько вещей:

Согласно вашему первому файлу docker-compose, вы должны различать определение сети и использование внутри службы docker-compose. Внутри docker-compose service (раздел haproxy :), вы должны использовать только docker-network name = athenanet в вашем случае. Все атрибуты, такие как внешние, должны быть определены в сетях: раздел, внешний раздел обслуживания. Просто взгляните на это:

haproxy:
  container_name: haproxy
  links:
    - 'mysql1:mysql1cl'
    - 'mysql2:mysql2cl'
  volumes:
    - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
  ports:
    - '33060:3306'
    - '38080:8080'
  image: 'haproxy:latest'
  networks:
    - athenanet

networks:
  athenanet:
    external:
      name: <external-docker-network-name>

Во-вторых, настоятельно рекомендуется не использовать зарезервированные ключевые слова для сетевых имен докеров. В вашем втором docker-compose вы пытаетесь работать с двумя сетями: athenanet и bridge, в то время как bridge является одним из возможных типов, как вы можете видеть в документации по docker:

https://docs.docker.com/network/

0 голосов
/ 21 января 2019

Вы почти у цели. Вы должны определить свою внешнюю сеть на верхнем уровне файла Compose, а не под сервисом. Поэтому поместите это в корень файла compose:

networks:
  mynetwork:
    external:
      name: my-pre-existing-network-name

Тогда под вашим сервисом haproxy используйте сеть:

haproxy:
        ...
        networks:
            - mynetwork

Вы можете проверить документы здесь: https://docs.docker.com/compose/compose-file/#external-1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...