1

У меня есть файл docker compose, который выглядит следующим образом:

version: '3.2'
services:
  service-one:
    build: service-one
    container_name: service-one
    networks:
      - my-custom-network
    restart: unless-stopped
  service-two:
    depends_on:
      - service-one
    build: service-two
    container_name: service-two
    networks:
      - my-custom-network
    restart: unless-stopped
networks:
  my-custom-network:
    driver: l2bridge

Похоже, что это отлично работает на моей машине, запустив docker-compose-up , все контейнеры запускаются, они объединены в сеть и могут при необходимости достигать хоста через 0.0.0.0 (были некоторые службы, которые мы не могли Контейнер еще, что хост должен работать).

Однако на компьютере другого разработчика он загружает все и запускает docker-compose up ; это создает сеть, машины запускаются, но он не может связаться с ними. Если он docker network inspect my-custom-network , он показывает, что сеть была создана, и IP-адреса были назначены, но ввод этих IP-адресов в браузер ничего не дает.

Мы попытались вручную собрать их по одной машине и поместить их в сеть по умолчанию "nat", и машины будут доступны, если они будут там размещены.

Итак, я думаю, мой вопрос состоит из двух частей:

  1. Могу ли я переписать свой файл compose для использования сети nat по умолчанию, но при этом получить имя службы в качестве имени хоста? (ожидается, что service-two сможет ссылаться на http://service-one/); Я знаю, что в Creators Update (недоступно для использования, мы работаем за корпоративной системой обновлений), я могу создать несколько сетей nat, но поскольку мы на Anniversary Edition, мы не можем.

Или же...

  1. Почему не работает его мост? Мой работает просто отлично, я знаю, что в официальной документации для l2bridge написано, что вам нужно обновление Creators, но ни один из нас не запускает его в настоящее время, и он все еще отлично работает на моей машине, а не на его. Мы используем одну и ту же сеть, с теми же правами доступа к ней, теми же прокси, той же подсетью, теми же серверами DHCP, той же конфигурацией корпоративного брандмауэра, той же групповой политикой, тем же набором обновлений Windows. Почему моя работа, а не его?

1 ответ1

1

Согласно статье Microsoft Windows Container Networking :

l2bridge - контейнеры, подключенные к сети, созданной с помощью драйвера 'l2bridge', будут находиться в той же IP-подсети, что и хост контейнера. IP-адреса должны назначаться статически с того же префикса, что и хост контейнера. Все конечные точки контейнера на хосте будут иметь одинаковый MAC-адрес из-за операции преобразования адреса уровня 2 (перезаписи MAC) на входе и выходе.

Требуется обновление для Windows Server 2016 или Windows 10 Creators

Поскольку вы и ваш коллега используете Windows 10 версии 1607 (Anniversary update), вы оба находитесь в ситуации, которая не гарантируется документацией. Разница в том, почему это работает для вас, а не для него, может заключаться в том, что некоторые обновления программного обеспечения или Windows установлены на вашем компьютере, но не на его, например, другой сетевой драйвер.

Я думаю, вам следует как обновить Windows 10 Creators Update (версия 1703), так и убедиться, что ваши версии Docker совпадают.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .