Bir LXC konteynerinin IP adresini nasıl alabilirim?

19

LXC kapsayıcılarını yönetmek için birkaç komut yazdım ve konsola bağlı olduğumu varsayarak IP adreslerini ifconfig üzerinden alabilirim.

Şimdi bu kapsayıcılara ssh ile bağlanmak istiyorum. IP adreslerini bir senaryo yazabilecek şekilde nasıl alabilirim? Ayrıca adresleri elle ayarlamak istemiyorum (ancak tek seçenek buysa).

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

    
sordu Stefano Palazzo 18.03.2013 17:41

11 cevap

10

Bunu şimdi yapmanın en kolay yolu şudur:

lxc-info -n container-name -iH

Bu, IP adresini başka bir metin olmadan döndürür.

-i seçeneği IP adresinin döndürülmesini ve -H seçeneğinin insan tarafından okunabilir çıktısını, yani etiketleri devre dışı bırakmasını belirtir. Daha fazla bilgi için lxc-info man sayfasına bakın. .

    
verilen cevap Andy 14.05.2015 15:02
10

Ubuntu'da kapsayıcılarda çalışan şeyler desteklenmiyor gibi görünüyorsa, bir sonraki en iyi önerim dnsmasq 'nin dağıttığı IP adresi kiralamalarına bakmaktır. 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ımda sadece iki bölüm var, bu yüzden çok daha güzel biçimlendirebiliriz:

$ awk '{ print , }' /var/lib/misc/dnsmasq.leases | column -t
containername  10.0.3.83
    
verilen cevap Oli 19.03.2013 14:03
7

Teknik olarak, bir komutta (ve çıktıyı işleyerek) bağlanmak ve ateş etmek için lxc-attach kullanabilmeniz gerekir. Bunun gibi:

sudo lxc-attach --name containername -- ifconfig

Bu, kapsayıcının çalışmasını gerektirir.

Not: Bunu işe alamıyorum. LXC'yi kurdum ve bunu denedim, ancak isim alanı hataları, eksik dosyalar ve diğer saçmalıklardan oluşan bir mantar gördü. Ama LXC ile olan tek deneyimim, bu soruya harcadığım 10 dakika. Çalışabilir. Bu olmayabilir. İyi şanslar!

    
verilen cevap Oli 18.03.2013 18:21
5

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

lxc-info -n $name -i

ve sadece IP adresini (komut dosyaları için yararlı) istiyorsanız, (@JulianHLam teşekkürler):

lxc-info -n $name -iH
    
verilen cevap vaab 11.04.2014 13:07
4

Ya da sorgu dnsmasq (kapsayıcılara IP'ler verir)

dig @10.0.3.1 $container-name +short
    
verilen cevap Carl Hörberg 21.08.2013 13:12
1

Aşağıdaki komut, önceki yayındaki lxc-attach örneğinin yerini alıyor

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

Kapsayıcının içinde ifconfig çalıştırı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 şeyin düzgün yapılandırılmadığı anlaşılıyor. Bir geçici çözüm olarak, daha fazla araştırma yapmadan çalışmasını sağlamak için LXC belgelerinin sağladığı önceden tanımlanmış yapılandırma şablonunu kullandım.

    
verilen cevap cfalguiere 31.01.2014 18:29
1

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

lxc exec <container-name> -- ip addr show eth0 | grep "inet\b" | awk '{print }' | cut -d/ -f1
    
verilen cevap anastymous 14.07.2016 02:09
1

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
    
verilen cevap Ektor 04.11.2016 11:55
0

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

    
verilen cevap ramigg 05.05.2014 14:16
0

Dnsmasq'ı sizin için yapalım.

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

/ etc / default / lxc-net dosyasında bu satırı uncomment:

LXC_DOMAIN="lxc"

Ev sahibinizin dnsmasq örneğinin NetworkManager tarafından başlatılması durumunda (mevcut Ubuntu masaüstü kurulumlarında olduğu gibi) bu satırda /etc/NetworkManager/dnsmasq.d/lxc.conf adlı bir dosya oluşturun:

server=/lxc/10.0.3.1

Ev sahibinizin dnsmasq'ı NetworkManager'dan başka bir şey tarafından başlatılmışsa, o satırı şu satırlara /etc/dnsmasq.d-available/lxc ekleyin:

server=/lxc/10.0.3.1

Ardından, değişiklikleri geri almak için yeniden başlatın:

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

lxc kapsayıcınızı yeniden başlatmanız veya DNS'de görünmeden önce yeni DHCP kiralamaları isteğinde bulunmanız gerekebilir. (Bunu yaptığımda gerekip gerekmediğini hatırlamıyorum.) Aynı zamanda, lxc-net'in yeniden başlatıldığında dnsmasq değişikliklerini almamasıyla ilgili bir hata raporu gördüğümü de belirtmek gerekir. Bu nedenle, ana sisteminizi yeniden başlatmak isteyebilirsiniz. emin olmak için.

Sonra deneyin:

$ host mycontainer.lxc
mycontainer.lxc has address 10.0.3.21

$ ssh [email protected]
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic x86_64)
[email protected]:~$
    
verilen cevap ʇsәɹoɈ 03.11.2014 21:17
0

Basit cevap

sudo lxc-ls -f | grep "container_name"

Eğer container_name'i hatırlamıyorsanız, sadece sudo lxc-ls -f yazın.

    
verilen cevap user646873 26.01.2017 08:12

Etiketlerdeki diğer soruları oku