The --net=host
opsi digunakan untuk membuat program-program dalam Docker wadah terlihat seperti mereka berjalan pada host itu sendiri, dari perspektif jaringan. Hal ini memungkinkan akses jaringan kontainer yang lebih besar daripada biasanya.
Biasanya Anda harus meneruskan port dari mesin host ke dalam sebuah wadah, tetapi ketika kontainer berbagi jaringan host, aktivitas jaringan apa pun terjadi secara langsung di mesin host - sama seperti jika program berjalan secara lokal di host, bukan di dalam a wadah.
Meskipun ini berarti Anda tidak lagi harus mengekspos port dan memetakannya ke port kontainer, itu berarti Anda harus mengedit Dockerfiles Anda untuk menyesuaikan port yang didengarkan oleh setiap kontainer, untuk menghindari konflik karena Anda tidak dapat memiliki dua kontainer yang beroperasi di tempat yang sama. port host. Namun, alasan sebenarnya untuk opsi ini adalah untuk menjalankan aplikasi yang memerlukan akses jaringan yang sulit diteruskan ke container di level port.
Misalnya, jika Anda ingin menjalankan server DHCP maka Anda harus dapat mendengarkan lalu lintas siaran di jaringan, dan mengekstrak alamat MAC dari paket. Informasi ini hilang selama proses penerusan port, jadi satu-satunya cara untuk menjalankan server DHCP di dalam Docker adalah dengan menjalankan container sebagai --net=host
.
Secara umum, --net=host
ini hanya diperlukan ketika Anda menjalankan program dengan kebutuhan jaringan yang sangat spesifik dan tidak biasa.
Terakhir, dari perspektif keamanan, kontainer Docker dapat mendengarkan di banyak port, meskipun mereka hanya mengiklankan (mengekspos) satu port. Biasanya ini baik-baik saja karena Anda hanya meneruskan satu port yang diharapkan, namun jika Anda menggunakannya --net=host
maka Anda akan mendapatkan semua port penampung yang mendengarkan pada host, bahkan yang tidak terdaftar di Dockerfile. Ini berarti Anda perlu memeriksa wadah dengan cermat (terutama jika itu bukan milik Anda, misalnya yang resmi yang disediakan oleh proyek perangkat lunak) untuk memastikan Anda tidak secara tidak sengaja mengekspos layanan tambahan pada mesin.
--net=host
di dalam Dockerfile?