Контейнеры Docker на WSL2 не добавляются в сеть моста

#docker #windows-subsystem-for-linux

Вопрос:

Проблема: Мои контейнеры (все из которых являются веб-серверами) не могут взаимодействовать друг с другом по имени контейнера (поиск DNS завершается ошибкой). Я могу заставить их общаться, создав новую сеть и добавив каждый созданный контейнер в эту сеть, но я бы предпочел не делать этого вручную.

Подробности: Согласно документам, все новые контейнеры должны автоматически добавляться в bridge сеть и иметь возможность просто обмениваться данными друг с другом container_name:port . Однако в WSL2, несмотря bridge на то, что сеть существует, контейнеры, похоже, не добавляются в нее, потому что они не могут взаимодействовать друг с другом по имени.

Обходные пути, которые я пробовал:

  • Я заставляю это работать прямо сейчас, создавая сеть и добавляя контейнеры в эту сеть. Однако это громоздко и невыполнимо, когда у меня в конечном итоге будет большое количество контейнеров.
  • docker-compose это идея, но мой набор интеграционных тестов создает контейнеры изнутри, и все мои интеграционные тесты не будут работать (и мне придется полностью переключиться на новый набор интеграционных тестов).

Есть ли способ, которым я могу автоматически присоединять новые контейнеры к сети моста (или к моей собственной сети) без использования docker-compose ?

  • Настольная версия Docker: 3.2.2 (61853)
  • Windows 10; Сборка 19042.928

Ответ №1:

 docker run --network="bridge" <mycontainer>
 

Вы можете точно проверить, что происходит внутри, с помощью

 docker inspect <containerID>
 

Комментарии:

1. Я попробовал это, и это действительно работает, за исключением того, что вместо этого мне пришлось указать свою собственную сеть bridge . Может быть, что-то не так с bridge сетью по умолчанию?

2. Хорошо, я подтвердил, что контейнеры добавляются в сеть моста по умолчанию, но в сети моста они не могут взаимодействовать друг с другом. Я изучу это дальше, чтобы понять, в чем проблема.

3. Я видел ваш ответ ниже (хотя не могу его прокомментировать, недостаточно репутации), и это объясняет, почему у меня была эта проблема внутри моего экземпляра QNAP docker, пока я не использовал docker-compose для добавления контейнеров в пользовательский мост qnap lxbr0 (с синтаксисом, который я опубликовал выше, и/или через docker-compose в зависимости от приложения). Я думал, что это было что-то особенное для настройки QNAP, но, похоже, это поведение ванильного докера.

Ответ №2:

Оказывается, мои контейнеры docker были добавлены в сеть моста по умолчанию. Однако то, что они не могут общаться друг с другом, является преднамеренным замыслом. Контейнеры bridge в сети по умолчанию не могут общаться друг с другом по имени хоста; для связи они должны использовать IP-адрес.

Ответ №3:

Я бы выбрал эти варианты тестирования, чтобы изолировать проблему

1 — проверьте, что сама сеть моста нормально работает в системе WSL, так как WSL является новым, есть некоторые проблемы. 2 — проверка контейнера, если да, это означает, что docker правильно создает контейнер 3 — попробуйте разрешить IP — адрес, чтобы проверить, разрешен ли он, если да, то это может быть чисто проблема DNS 4-в соответствии с 3-м пунктом будет проверен модуль DNS, если он работает правильно.

Если возможно, не могли бы вы поделиться точной ошибкой и статусом модуля DNS.