Hubungkan wadah Docker ke jaringan host dan internal bridge

14

Saya mencoba menjalankan wadah Docker sebagai router antara --internaljaringan Docker pribadi ( ) dan jaringan yang telah ditentukan host. Ini berarti wadah perlu memiliki dua antarmuka jaringan: Satu antarmuka "luar", yang dapat mengakses semua alamat IP host, dan satu antarmuka "di dalam", yang bertindak sebagai gateway untuk kontainer di jaringan Docker internal

Wadah router itu sendiri akan lalu lintas jaringan NAT dari / ke wadah.

Saya belum menemukan cara untuk mengkonfigurasi Docker untuk menjalankan wadah dengan dua antarmuka tersebut. Yang paling dekat yang bisa saya dapatkan adalah memiliki dua bridgeantarmuka yang ditugaskan, yang tidak persis apa yang saya butuhkan.

Mencoba terhubung secara manual menghasilkan kesalahan:

# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network

Adakah yang bisa menunjukkan kepada saya bagaimana mencapai ini, lebih disukai bahkan dengan Docker Compose?

Hexaholic
sumber
@PunMum Sayangnya tidak. Kami akhirnya menghubungkan semua kontainer langsung ke jaringan host dan mengkonfigurasi IP di dalam kontainer.
Hexaholic

Jawaban:

2

Menurut T&J ini di github :

Jaringan host khusus. Anda harus menggunakan network_mode: host di layanan

030
sumber
Ini network_modetidak berfungsi jika Anda memerlukan sesuatu yang terhubung ke jaringan internal dan jaringan host. Tampaknya gila bahwa kita tidak dapat menemukan solusi yang jelas dan bagus untuk masalah ini.
jv-dev
2

Docker tidak memungkinkan untuk menghubungkan wadah ke jaringan host dan jaringan jembatan Docker lainnya secara bersamaan. Saya akan mencoba mengilustrasikan alasannya dengan sebuah contoh:

  • Mari kita pikirkan wadah C1. Secara hipotesis, C1 akan terhubung ke jaringan host (--net = host) dan jaringan Docker bridge Br1 (--net = Br1).
  • Wadah kedua, katakanlah C2, terhubung ke Br1.

Dengan pengaturan di atas, dugaan saya adalah bahwa jaringan host terlihat dari C2, dan saya kira inilah alasan mengapa Docker secara otomatis mencegah kami dari mengekspos jaringan host secara tidak sengaja ke wadah yang tidak ditentukan oleh host.

Yang sedang berkata, jika kita memiliki satu set kontainer, dan kita ingin semuanya saling berhubungan, dengan hanya satu kontainer yang memiliki akses ke jaringan host, pendekatan saya adalah:

  • [C2, ..., CN] terhubung ke jembatan Docker yang ditentukan pengguna (--net = Br1)
  • C1 terhubung ke jaringan host (--net = host)
  • C1 memaparkan port agar dapat diakses dari sisa wadah

EDIT: Kami masih harus menyesuaikan kebijakan iptables sedemikian rupa sehingga C1 dapat dijangkau dari sisa wadah (lihat https://docs.docker.com/network/iptables/ )

JJFanFer
sumber