Napisałem kilka skryptów do zarządzania kontenerami LXC i mogę uzyskać ich adresy IP poprzez ifconfig, zakładając, że jestem podłączony do konsoli.
Chcę teraz połączyć się z tymi kontenerami przez ssh. Jak uzyskać ich adres IP w taki sposób, że mogę napisać skrypt? Nie chcę też ustawiać adresów ręcznie (ale zrobię to, jeśli to jedyna opcja).
Do tej pory próbowałem używać lxc-start
, ale maszyna nie ma adresu IP przed uruchomieniem /sbin/init
.
Odpowiedzi:
Najłatwiej to zrobić teraz:
Zwraca adres IP bez żadnego innego tekstu.
Do
-i
opcja określa, czy adres IP powinien być zwrócony i-H
wyłącza opcja człowieka wyjściowe czytelny tj etykiet. Aby uzyskać więcej informacji zobacz lxc-info stronę man .EDYCJA dla nowszej wersji LXC:
lxc info container-name
Następnie otrzymasz szczegółowe informacje. Spójrz na blok „Ips:”, który powinien wyglądać jak ten poniżej. W takim przypadku możesz pobrać pierwszy adres IPv4 (
10.121.48.241
):źródło
Ponieważ wydaje się, że uruchamianie rzeczy w kontenerach nie jest obsługiwane w Ubuntu, moją następną najlepszą propozycją jest przyjrzenie się dzierżawionym adresom IP
dnsmasq
. To naprawdę proste:Istnieją tylko dwie części, które są przydatne, więc możemy sformatować je o wiele ładniej:
źródło
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Technicznie rzecz biorąc, powinieneś być w stanie użyć
lxc-attach
do połączenia i odpalenia polecenia (i przetworzenia danych wyjściowych), w następujący sposób:Wymaga to działania kontenera.
Uwaga: nie mogłem tego uruchomić. Zainstalowałem LXC i spróbowałem tego, ale właśnie zobaczyłem masę błędów przestrzeni nazw, brakujących plików i innych bzdur. Ale moje jedyne doświadczenie z LXC to 10 minut, które spędziłem na tym pytaniu. To może zadziałać. Może nie. Powodzenia!
źródło
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
jeśli chcesz tylko adres IP.No such file or directory - failed to open '/proc/28741/ns/pid'
afailed to enter the namespace
. Znalazłem błąd, który dokładnie opisuje problem, ale pochodzi z 2010 roku.Działa to na Ubuntu 14.04:
a jeśli chcesz tylko adres IP (przydatne dla skryptów), (dzięki @JulianHLam):
źródło
lxc-info -n $name -Hi
uzyskać adres IP bez obcych znakówLub zapytanie dnsmasq (który daje adresy IP kontenerom)
źródło
Wersja Python, aby to zrobić:
źródło
Poniższe polecenie zastępuje
lxc-attach
przykład w poprzednim pościeDziała
ifconfig
wewnątrz kontenera i pokazuje wynik.Wygląda na to, że coś nie jest poprawnie skonfigurowane. Aby obejść ten problem, wykorzystałem predefiniowany szablon konfiguracji dostarczony przez dokumentację LXC, aby działał bez dalszych badań.
źródło
Jeśli korzystasz z LXD, możesz uznać to polecenie za przydatne do uzyskania adresu IP działającego kontenera
źródło
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
źródło
Pozwól dnsmasq zrobić to za Ciebie.
Skonfiguruj wystąpienie dnsmasq na komputerze hosta, aby wyszukiwać wystąpienie dnsmasq w lxc dla domeny najwyższego poziomu .lxc.
W / etc / default / lxc-net, odkomentuj ten wiersz:
Jeśli instancja dnsmasq twojego hosta jest uruchamiana przez NetworkManager (jak ma to miejsce w przypadku większości aktualnych instalacji Ubuntu na komputerze), utwórz plik o nazwie /etc/NetworkManager/dnsmasq.d/lxc.conf z tą linią wewnątrz:
Jeśli dnsmasq twojego hosta jest uruchamiany przez coś innego niż NetworkManager, dodaj tę linię do /etc/dnsmasq.d-available/lxc:
Następnie uruchom ponownie, aby pobrać zmiany:
Konieczne może być ponowne uruchomienie kontenerów LXC lub zmuszenie ich do zażądania nowych dzierżaw DHCP, zanim pojawią się one w DNS. (Nie pamiętam, czy było to konieczne, kiedy to zrobiłem.) Warto również wspomnieć, że widziałem raport o błędzie dotyczący tego, że lxc-net nie wykrywa zmian dnsmasq po ponownym uruchomieniu, więc możesz chcieć ponownie uruchomić system hosta po prostu być pewnym.
Następnie spróbuj:
źródło
Prosta odpowiedź brzmi
Jeśli nie pamiętasz nazwy_kontenera, po prostu wpisz sudo lxc-ls -f.
źródło