Ta --net=host
opcja służy do tego, aby programy wewnątrz kontenera Dockera wyglądały tak, jakby były uruchomione na samym hoście, z perspektywy sieci. Pozwala kontenerowi na większy dostęp do sieci niż normalnie.
Zwykle musisz przekazywać porty z komputera hosta do kontenera, ale gdy kontenery współużytkują sieć hosta, każda aktywność sieciowa ma miejsce bezpośrednio na komputerze-hoście - tak jak gdyby program działał lokalnie na hoście zamiast wewnątrz pojemnik.
Chociaż oznacza to, że nie musisz już ujawniać portów i mapować ich na porty kontenerów, oznacza to, że musisz edytować swoje Dockerfiles, aby dostosować porty, na których nasłuchuje każdy kontener, aby uniknąć konfliktów, ponieważ nie możesz mieć dwóch kontenerów działających na tym samym port hosta. Jednak prawdziwym powodem tej opcji jest uruchamianie aplikacji wymagających dostępu do sieci, który jest trudny do przekazania do kontenera na poziomie portu.
Na przykład, jeśli chcesz uruchomić serwer DHCP, musisz mieć możliwość nasłuchiwania ruchu rozgłoszeniowego w sieci i wyodrębnienia adresu MAC z pakietu. Te informacje są tracone podczas procesu przekierowania portów, więc jedynym sposobem na uruchomienie serwera DHCP wewnątrz platformy Docker jest uruchomienie kontenera jako --net=host
.
Ogólnie rzecz biorąc, --net=host
jest potrzebne tylko wtedy, gdy uruchamiasz programy o bardzo specyficznych, nietypowych potrzebach sieciowych.
Wreszcie, z punktu widzenia bezpieczeństwa, kontenery Docker mogą nasłuchiwać na wielu portach, mimo że reklamują (ujawniają) tylko jeden port. Zwykle jest to w porządku, ponieważ przekazujesz tylko jeden oczekiwany port, jednak jeśli użyjesz --net=host
, otrzymasz wszystkie porty kontenera nasłuchujące na hoście, nawet te, które nie są wymienione w pliku Dockerfile. Oznacza to, że będziesz musiał dokładnie sprawdzić kontener (zwłaszcza jeśli nie jest twój, np. Oficjalny dostarczony przez projekt oprogramowania), aby upewnić się, że nieumyślnie nie ujawnisz dodatkowych usług na komputerze.
--net=host
w pliku Dockerfile?