LXC konteynerinin IP adresini nasıl edinebilirim?


19

LXC kapsayıcılarını yönetmek için birkaç komut dosyası yazdım ve konsola bağlı olduğum varsayılarak IP adreslerini ifconfig aracılığıyla alabilirim.

Şimdi bu kaplara ssh ile bağlanmak istiyorum. IP adreslerini bir komut dosyası yazabilecek şekilde nasıl alabilirim? Ayrıca adresleri manuel olarak ayarlamak istemiyorum (ancak tek seçenek bu ise ben yaparım).

Şimdiye kadar kullanmayı denedim lxc-start, ancak çalıştırmadan önce makinenin IP adresi yok /sbin/init.


Bu hata raporuna ilişkin Aynen sorun, bugs.launchpad.net/ubuntu/+source/lxc/+bug/1389954 bu konuda doğrulayıcı bilgiler içerdiğinden değil dnsmasq nerede Ubuntu 16.04 Sunucu Edtions çalışan ancak Masaüstü Tamam olmak NetworkManager tarafından başlatıldı ('orman' tarafından askubuntu.com/a/545265/599087'de önerildiği gibi ). osdir.com/ml/ubuntu-bugs/2016-10/msg05441.html
OpenITeX

Yanıtlar:


10

Bunu şimdi yapmanın en kolay yolu:

lxc-info -n container-name -iH

Bu, başka metin içermeyen IP adresini döndürür.

Bu -iseçenek, IP adresinin döndürülmesi gerektiğini belirtir ve -Hseçenek, insan tarafından okunabilir çıkışı, yani etiketleri devre dışı bırakır. Daha fazla bilgi için lxc-info man sayfasına bakınız .

LXC'nin daha yeni sürümü için EDIT:

lxc info container-name

Sonra detaylı bilgi alırsınız. Aşağıdaki gibi görünmesi gereken "Ips:" bloğuna bakın. 10.121.48.241Bu durumda ilk IPv4 adresini ( ) alabilirsiniz:

Ips:
  eth0: inet    10.121.48.241   vethSBP4RR
  eth0: inet6   fda5:b9a9:f3b9:ba32:216:3eff:fe4a:4d7d  vethSBP4RR
  eth0: inet6   fe80::216:3eff:fe4a:4d7d    vethSBP4RR
  lo:   inet    127.0.0.1
  lo:   inet6   ::1

LXD ve ayrıcalıklı kapsayıcılarla çalışırken bu komut kullanılmaz. LXD tarafından 2017'de tanıtılan varsayılan ayrıcalıksız kaplarla bu bilgileri nasıl elde edersiniz?
jgomo3

10

Ubuntu'da kapsayıcılarda çalışan şeyler desteklenmiyor gibi görünüyor, bir sonraki en iyi önerim, dağıtılan IP adresi kiralamalarına bakmak dnsmasq. Bu gerçekten basit:

$ cat /var/lib/misc/dnsmasq.leases
1363699477 00:16:3e:4a:ce:a4 10.0.3.83 containername *

Orada herhangi bir kullanım sadece iki bölüm vardır, bu yüzden bunu çok daha güzel biçimlendirebiliriz:

$ awk '{ print $4,$3 }' /var/lib/misc/dnsmasq.leases | column -t
containername  10.0.3.83

Mükemmel çalışıyor!
Stefano Palazzo

2
Referans için: LXC'nin yeni sürümleri (yani Raring'deki), çıkışındaki IP adresini gösterir lxc-ls --fancy.
Stefano Palazzo

FYI, Ubuntu üzerinde bu IP kira kayıtlarının dosya adı lxc köprü adı içerirdnsmasq.lxcbr0.leases
Flint

7

Teknik olarak lxc-attach, bir komutu bağlamak ve ateşlemek (ve çıkışı işlemek) için kullanabilmeniz gerekir , örneğin:

sudo lxc-attach --name containername -- ifconfig

Bu, kabın çalışmasını gerektirir.

Not: Bunu çalıştıramadım. LXC'yi yükledim ve denedim ama sadece isim alanı hataları, eksik dosyalar ve diğer saçmalıkların bir tanesini gördüm. Ama LXC ile ilgili tek deneyimim bu soruya harcadığım 10 dakikadır. Çalışabilir. Olmayabilir. İyi şanslar!


Ve elbette, ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2sadece IP adresini istiyorsanız bunu yükseltin .
Oli

Ne yazık ki aynı tür hatalar alıyorum. No such file or directory - failed to open '/proc/28741/ns/pid've failed to enter the namespace. Sorunu tam olarak açıklayan bir hata buldum , ancak 2010'dan itibaren.
Stefano Palazzo

Ifconfig için tam yol kullanmak zorunda kaldım: lxc-attach -n konteyner / sbin / ifconfig
Epeli

Gibi help.ubuntu.com/12.04/serverguide/lxc.html diyor desteklenmez LXC-ekleyin.
ciastek

5

Bu Ubuntu 14.04 üzerinde çalışır:

lxc-info -n $name -i

ve yalnızca IP adresini (komut dosyaları için yararlıdır) istiyorsanız (teşekkürler @JulianHLam):

lxc-info -n $name -iH

Bir komut dosyası aracılığıyla arama yapıyorsanız, lxc-info -n $name -Hiharici boşluk olmadan sadece IP almak için bile yapabilirsiniz
Julian H. Lam

4

Veya dnsmasq sorgusu (kapsayıcılara IP'ler verir)

dig @10.0.3.1 $container-name +short

2

Bunu yapmak için Python sürümü:

#!/usr/bin/python
from pylxd import Client

client = Client(endpoint='https://10.185.96.208:8443', verify=False,    cert=('.config/lxc/client.crt', '.config/lxc/client.key'))

myCtr = client.containers.get('YOUR_CTR_NAME')
addresses = myCtr.state().network['eth0']['addresses']
for a in addresses:
   if(a['scope'] == 'global'):
      print "Found IP [%s]" %(a['address'])
      break

1

Aşağıdaki komut lxc-attach, bir önceki gönderideki örneği değiştirir

sudo lxc-execute --name containername --rcfile /usr/share/doc/lxc/examples/lxc-macvlan.conf /sbin/ifconfig

ifconfigKabın içinde çalışır ve çıktıyı gösterir.

The --rcfile argument might not be required. Without it the command failed with 

lxc-execute: No such file or directory - failed to exec /usr/lib/lxc/lxc-init 

lxc-execute: invalid sequence number 1. expected 2

Bir şey düzgün yapılandırılmamış gibi görünüyor. Geçici bir çözüm olarak, daha fazla araştırma yapmadan çalışması için LXC belgeleri tarafından sağlanan önceden tanımlanmış yapılandırma şablonunu kullandım.


1

LXD çalıştırıyorsanız, bu komutu çalışan bir kapsayıcı IP adresini almak için yararlı bulabilirsiniz

lxc exec <container-name> -- ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1

0

sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1


0

Dnsmasq sizin için yapsın.

Ana makinenizin dnsmasq örneğini, lxc'nin dnsmasq örneğini .lxc üst düzey etki alanı için sorgulayacak şekilde yapılandırın.

/ Etc / default / lxc-net dizininde şu satırı aç:

LXC_DOMAIN="lxc"

Ana makinenizin dnsmasq örneği NetworkManager tarafından başlatılırsa (en güncel Ubuntu masaüstü kurulumlarında olduğu gibi) bu satırın içinde /etc/NetworkManager/dnsmasq.d/lxc.conf adlı bir dosya oluşturun:

server=/lxc/10.0.3.1

Ana makinenizin dnsmasq'ı NetworkManager dışında bir şey tarafından başlatılırsa, bu satırı /etc/dnsmasq.d-available/lxc dosyasına ekleyin:

server=/lxc/10.0.3.1

Sonra değişiklikleri yeniden başlatacak şekilde yeniden başlatın:

service lxc-net stop
service lxc-net start
service network-manager restart

Lxc kapsayıcılarınızı yeniden başlatmanız veya DNS'de görünmeden önce yeni DHCP kiraları istemelerini sağlamanız gerekebilir. (Bunu yaptığımda gerekli olup olmadığını hatırlamıyorum.) Ayrıca, yeniden başlatıldığında lxc-net dnsmasq değişikliklerini almadığını belirten bir hata raporu gördüğümü belirtmek gerekir, bu yüzden sadece ana sisteminizi yeniden başlatmak isteyebilirsiniz emin olmak.

Sonra deneyin:

$ host mycontainer.lxc
mycontainer.lxc has address 10.0.3.21

$ ssh ubuntu@mycontainer.lxc
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic x86_64)
ubuntu@mycontainer:~$

0

Basit cevap

sudo lxc-ls -f | grep "container_name"

Container_name öğesini hatırlamıyorsanız, sudo lxc-ls -f yazın.

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.