Docker kapsayıcısını hem ana bilgisayara hem de dahili köprü ağına bağlayın


14

Docker kapsayıcısını özel ( --internal) Docker ağı ve önceden tanımlanmış hostağ arasında bir yönlendirici olarak çalıştırmaya çalışıyorum . Bu, kabın iki ağ arabirimine sahip olması gerektiği anlamına gelir: tüm ana bilgisayar IP adreslerine erişebilen bir "dış" arabirim ve dahili Docker ağındaki kapsayıcılar için ağ geçidi görevi gören bir "iç" arabirim

Yönlendirici kapsayıcısının kendisi daha sonra kaplardan gelen / kaplara NAT ağ trafiği oluşturur.

Docker'ı bu iki arabirimle kapsayıcıyı çalıştıracak şekilde yapılandırmanın bir yolunu bulamadım. Ben alabildiğim en yakın iki bridgearayüz atanmış olması, tam olarak ihtiyacım olan şey değil.

Manuel olarak bağlanmaya çalışmak hatayla sonuçlanır:

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

Biri bana bunu nasıl başaracağımı, tercihen Docker Compose ile bile olsa gösterebilir mi?


@PunMum Maalesef değil. Tüm kapsayıcıları doğrudan ana bilgisayar ağına bağladık ve kapların içindeki IP'leri yapılandırdık.
Hexaholic

Yanıtlar:


2

Github'daki bu soru ve cevaplara göre :

Ana bilgisayar ağı özeldir. Hizmette network_mode: host kullanmanız gerekir


network_modeEğer dahili bir ağ ve ana bilgisayar ağına bağlı bir şey gerekiyorsa çalışmaz. Bu soruna iyi bir çözüm bulamadığımız delilik gibi görünüyor.
jv-dev

2

Docker, ana ağa ve diğer Docker köprü ağlarına aynı anda bir kap bağlanmasına izin vermez. Nedeni bir örnekle göstermeye çalışacağım:

  • Bir konteyner C1'i düşünelim. Varsayımsal olarak, C1 ana bilgisayar ağına (--net = ana bilgisayar) ve bir Docker köprü ağı Br1'e (--net = Br1) bağlanır.
  • C2 diyelim, ikinci bir kap Br1'e bağlandı.

Yukarıdaki kurulumla, tahminim, ana bilgisayar ağının C2'den görünür olması ve Docker'ın ana bilgisayar ağını istemeden ana bilgisayar belirtilmemiş kaplara maruz bırakmamızı otomatik olarak engellemesinin nedeni olduğunu düşünüyorum.

Bununla birlikte, bir dizi kapsayıcı varsa ve hepsinin birbirine bağlanmasını istiyorsak, yalnızca tek bir kapsayıcı ana bilgisayar ağına erişebilirse, yaklaşımım şöyle olacaktır:

  • [C2, ..., CN] kullanıcı tanımlı bir Docker köprüsü Br1'e (--net = Br1) bağlandı
  • C1 ana bilgisayar ağına bağlı (--net = ana bilgisayar)
  • C1, konteynırların geri kalanından erişilebilir olması için bir limanı açığa çıkarır

DÜZENLEME: Iptables politikalarını, C1'in konteynerin geri kalanından erişilebilecek şekilde uyarlaması gerekecekti (bkz. Https://docs.docker.com/network/iptables/ )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.