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