Рейтинг:1

docker - создать два контейнера с двумя разными идентификаторами сети вместо использования сети моста по умолчанию

флаг uz

Моя цель состояла в том, что Дженкинс контейнер будет «разговаривать» с Ансибль контейнер для создания Дженкинс файл для Дженкинс трубопровод.

Я ожидал, что эти два контейнера «присоединятся» к мост network и получить 2 IP-адреса с одним и тем же идентификатором сети, но вместо этого были созданы две дополнительные сети, и каждый контейнер получил IP-адрес с другим идентификатором сети.

Также ожидается, что эти два контейнера будут иметь доступ к интернету.

Итак, в моей Windows 10 я использую Docker Desktop, У меня есть 2 файла docker-compose.yml,
Один, для Дженкинс контейнер:

версия: '3.7'
Сервисы:
  Дженкинс:
    изображение: Дженкинс/Дженкинс:lts
    привилегированный: правда
    пользователь: корень
    порты:
      - 8080:8080
      - 50000:50000
    имя_контейнера: Дженкинс

Другой, для Ансибль контейнер:

версия: '2'
Сервисы:
  доступный:
    имя_контейнера: доступный
    имя хоста: доступный
    изображение: доступный
    тома:
      - ~/продукт/возможность:/возможность
    рабочий_каталог: /возможный
    строить:
      контекст: .
      докерфайл: Докерфайл
    DNS:
      - 200.20.200.20

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

docker-compose up --build

Я проверил сетевые данные моего контейнера и обнаружил, что у каждого контейнера свой идентификатор сети, см. ниже:

PS> docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' доступный
172.18.0.2
PS> docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jenkins
172.19.0.2

проверьте раздел моих сетей докеров, выяснилось, что были созданы еще 2 сети, кроме мост, хозяин и никто:

PS > сеть докеров ls
ИДЕНТИФИКАТОР СЕТИ НАЗВАНИЕ ДРАЙВЕР ОБЛАСТЬ ПРИМЕНЕНИЯ
8cefaed24885 локальный мост ansible_default
44bedcd1622d мост мост местный
61e1c7f7051e хост хост локальный
b5a7a7a424a4 jenkins_default локальный мост
4e5d6c77cb5a нет null локальный

Конечно, осмотр мост сеть показывает, что контейнер ключ пустой:

{
    «Имя»: «мост»,
    "Идентификатор": "44bedcd1622d820ce4e29a5cd545f244ba2d303102f1956fe76069a63e7c220e",
    "Создано": "2021-08-25T13:13:57.6577149Z",
    «Область действия»: «местный»,
    «Водитель»: «мост»,
    «Включить IPv6»: ложь,
    "ИПАМ": {
        "Драйвер": "по умолчанию",
        «Опции»: ноль,
        "Конфигурация": [
            {
                "Подсеть": "172.17.0.0/16",
                «Шлюз»: «172.17.0.1»
            }
        ]
    },
    "Внутренний": ложь,
    "Присоединяемый": ложь,
    "Вход": ложь,
    «Конфигурация»: {
        "Сеть": ""
    },
    "Только Конфигурация": ложь,
    "Контейнеры": {},
    "Параметры": {
        "com.docker.network.bridge.default_bridge": "истина",
        "com.docker.network.bridge.enable_icc": "истина",
        "com.docker.network.bridge.enable_ip_masquerade": "true",
        "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
        "com.docker.network.bridge.name": "docker0",
        "com.docker.network.driver.mtu": "1500"
    },
    «Ярлыки»: {},
    «Время создания»: 1629897237657
}

Мой вопрос:
а) Почему были созданы еще две сети докеров, когда я запускал docker-compose up --build команда?
б) Как я могу заставить эти контейнеры работать с мост сети и получить IP-адреса одного и того же идентификатора сети (идентификатор сети моста 172.17.x.x) для того, чтобы они говорили друг с другом?

Рейтинг:0
флаг ro

Решение для подключения нескольких экземпляров docker-compose — использование внешних сетей.

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

сеть докеров создать мою сеть

Затем добавьте в оба файла docker-compose.yml следующее:

сети:
  моя сеть:
    внешний: правда

А в сетевом разделе сервисов:

(...)
  сети:
    - моя сеть
(...)

Докер-композиция Дженкинса станет:

версия: '3.7'

сети:
  моя сеть:
    внешний: правда

Сервисы:
  Дженкинс:
    изображение: Дженкинс/Дженкинс:lts
    привилегированный: правда
    пользователь: корень
    сети:
      - моя сеть
    порты:
      - 8080:8080
      - 50000:50000
    имя_контейнера: Дженкинс

Следуйте той же идее для другого файла docker-compose.yml.

флаг uz
Благодарю. Уточните, пожалуйста: а) Есть ли способ использовать сеть *мост по умолчанию*? b) Является ли синтаксис для docker-compose ```версия: 3.7``` равным ```версии 2.0```?
флаг uz
Как включить статический IP в ваше решение?
João Alves avatar
флаг ro
а) Мостовая сеть по умолчанию доступна только для служб в одном конкретном файле docker-compose.yml. Если вы поместите все службы в этот файл, все они будут использовать одну и ту же сеть. б) Каждая версия docker-compose yaml имеет свой особый синтаксис, обычно дополняющий друг друга, но есть некоторые исключения. Документация по этой теме очень обширна на сайте докеров (https://docs.docker.com/compose/compose-file/compose-versioning/). - В докере не принято использовать статический IP. Вы можете разрешить IP-адрес из DNS. Один пример: от jenkins: контейнер ansible — `ansible.my_network`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.