#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.