Нет сети от хоста до контейнера докеров

У меня есть хост CentOS 7.2, на котором запущен Docker 19.03. Все контейнеры докеров находятся в сети моста (172.18.0.0/16). С хоста я могу пинговать шлюз (172.18.0.1), но не мои контейнеры (172.18.0.2 и 172.18.0.3). И из своих контейнеров я также могу пинговать шлюз, но не свой хост.

Мостовая сеть имеет в основном конфигурацию по умолчанию. Но есть ли что-то еще, что мне не хватает?


person LazuLite    schedule 27.03.2020    source источник
comment
Прямое обращение к частным IP-адресам контейнера обычно не является лучшей практикой. (Имеющаяся у вас установка, вызывающая их с того же хоста с родным Linux, является единственной установкой, где она работает.) Обычно лучше вызывать контейнер через его опубликованные порты (опция docker run -p, Docker Compose ports:).   -  person David Maze    schedule 28.03.2020
comment
@DavidMaze Спасибо за ответ, полностью с вами согласен. Я не подключаю хост к контейнеру (или наоборот), просто чтобы проверить, есть ли соединение. Открытые порты докера вообще недоступны извне (например, хосту).   -  person LazuLite    schedule 28.03.2020


Ответы (1)


Docker использует iptables и модуль ядра br_netfilter для управления межконтейнерной сетью. Когда демон Docker запускается, он создает множество правил IPTables, необходимых для работы. И каждый раз, когда создается новый контейнер, создаются и изменяются дополнительные правила. Если iptables находится в странном состоянии, был изменен вами или не установлен, это может вызвать вашу проблему.

Я упомянул br_netfilter выше. Действует аналогично. Вы можете подтвердить, что модуль ядра загружен, с помощью команды lsmod. Например: lsmod | grep br_netfilter. Если он не загружен, вы можете загрузить его с помощью modprobe. Например: modprobe br_netfilter. Если он недоступен, значит, модуль ядра не установлен в вашем скомпилированном ядре. Если вам удалось запустить modprobe для загрузки модуля, вам нужно будет изменить /etc/modprobe.conf или поместить файл в /etc/modprobe.d, чтобы обеспечить постоянство модулей ядра между перезагрузками.

person TJ Zimmerman    schedule 28.03.2020
comment
добавьте журнал: [root @ dms-zookeeper-0005 log] # сообщения grep bridge.ko 10 июля 05:27:00 dms-zookeeper-0005 dockerd: time = 2021-07-10T05: 27: 00.161061360 + 08: 00 level = предупреждение msg = Выполнение моста modprobe br_netfilter завершилось ошибкой с сообщением: modprobe: ПРЕДУПРЕЖДЕНИЕ: модуль br_netfilter не найден. \ ninsmod /lib/modules/3.10.0-327.62.59.83.h195.x86_64/kernel/net/llc/llc.ko \ ninsmod /lib/modules/3.10.0-327.62.59.83.h195.x86_64/kernel/net/802/stp.ko \ ninsmod /lib/modules/3.10.0-327.62.59.83.h195.x86_64/kernel/net/ bridge / bridge.ko \ n, ошибка: статус выхода 1 - person Languoguang; 10.07.2021