Эта --net=host
опция используется для того, чтобы программы внутри контейнера Docker выглядели так, как будто они работают на самом хосте, с точки зрения сети. Это дает контейнеру больший доступ к сети, чем обычно.
Обычно вам необходимо перенаправить порты с хост-машины в контейнер, но когда контейнеры совместно используют сеть хоста, любая сетевая активность происходит непосредственно на хост-машине - так же, как если бы программа выполнялась локально на хосте, а не внутри контейнер.
Хотя это означает, что вам больше не нужно открывать порты и сопоставлять их с портами контейнера, это означает, что вам нужно отредактировать свои файлы Docker, чтобы настроить порты, которые прослушивает каждый контейнер, чтобы избежать конфликтов, поскольку у вас не может быть двух контейнеров, работающих на одном и том же порт хоста. Однако настоящая причина этого варианта - запуск приложений, которым необходим сетевой доступ, который трудно перенаправить в контейнер на уровне порта.
Например, если вы хотите запустить DHCP-сервер, вам необходимо иметь возможность прослушивать широковещательный трафик в сети и извлекать MAC-адрес из пакета. Эта информация теряется во время процесса перенаправления портов, поэтому единственный способ запустить DHCP-сервер внутри Docker - запустить контейнер как --net=host
.
Вообще говоря, --net=host
он нужен только тогда, когда вы запускаете программы с очень специфическими, необычными сетевыми потребностями.
Наконец, с точки зрения безопасности, контейнеры Docker могут прослушивать множество портов, даже если они объявляют (раскрывают) только один порт. Обычно это нормально, поскольку вы перенаправляете только один ожидаемый порт, однако, если вы используете, --net=host
вы получите все порты контейнера, прослушивающие хост, даже те, которые не указаны в Dockerfile. Это означает, что вам нужно будет внимательно проверить контейнер (особенно, если он не ваш, например, официальный, предоставленный программным проектом), чтобы случайно не выставить дополнительные сервисы на машине.
--net=host
в Dockerfile?