Ich habe ein paar Skripte geschrieben, um LXC-Container zu verwalten, und ich kann ihre IP-Adressen über ifconfig abrufen, sofern ich mit der Konsole verbunden bin.
Ich möchte mich jetzt mit diesen Containern über ssh verbinden. Wie bekomme ich ihre IP-Adresse so, dass ich ein Skript schreiben kann? Ich möchte die Adressen auch nicht manuell festlegen (aber ich werde es tun, wenn dies die einzige Option ist).
Bisher habe ich versucht, zu verwenden lxc-start
, aber der Computer hat keine IP-Adresse, bevor ich ausgeführt werde /sbin/init
.
Antworten:
Der einfachste Weg, dies jetzt zu tun, ist:
Dies gibt die IP-Adresse ohne weiteren Text zurück.
Die
-i
Option gibt an, dass die IP-Adresse zurückgegeben werden soll, und-H
deaktiviert die von Menschen lesbare Ausgabe, dh Beschriftungen. Weitere Informationen finden Sie in der lxc-info Manpage .EDIT für neuere Version von LXC:
lxc info container-name
Dann bekommst du ausführliche Infos. Schauen Sie sich den "Ips:" - Block an, der wie der folgende aussehen sollte.
10.121.48.241
In diesem Fall können Sie die erste IPv4-Adresse ( ) abrufen:quelle
Da das Ausführen von Dingen in Containern in Ubuntu anscheinend nicht unterstützt wird, ist mein nächster bester Vorschlag, sich die IP-Adress-Leases anzusehen, die
dnsmasq
verteilt werden. Das ist ganz einfach:Es gibt nur zwei Teile, die von Nutzen sind, so dass wir sie viel besser formatieren können:
quelle
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Technisch gesehen sollten Sie in der Lage sein,
lxc-attach
einen Befehl zu verbinden und auszulösen (und die Ausgabe zu verarbeiten):Dies setzt voraus, dass der Container ausgeführt wird.
Hinweis: Ich konnte das nicht zum Laufen bringen. Ich habe LXC installiert und dies ausprobiert, aber nur eine Menge Namespace-Fehler, fehlende Dateien und anderen Unsinn gesehen. Meine einzige Erfahrung mit LXC sind die 10 Minuten, die ich mit dieser Frage verbracht habe. Es könnte funktionieren. Es könnte nicht sein. Viel Glück!
quelle
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
wenn Sie nur die IP-Adresse möchten.No such file or directory - failed to open '/proc/28741/ns/pid'
undfailed to enter the namespace
. Ich habe einen Fehler gefunden , der das Problem genau beschreibt, aber er stammt aus dem Jahr 2010.Dies funktioniert unter Ubuntu 14.04:
und wenn du nur die IP-Adresse willst (nützlich für Skripte), (danke @JulianHLam):
quelle
lxc-info -n $name -Hi
, um nur die IP ohne extranneous Whitespace zu erhaltenOder fragen Sie dnsmasq ab (das den Containern IPs gibt)
quelle
Python-Version, um es zu tun:
quelle
Der folgende Befehl ersetzt das
lxc-attach
Beispiel im vorherigen BeitragEs läuft
ifconfig
im Container und zeigt die Ausgabe.Es hört sich so an, als ob etwas nicht richtig konfiguriert ist. Um dieses Problem zu umgehen, habe ich die vordefinierte Konfigurationsvorlage aus der LXC-Dokumentation verwendet, damit sie ohne weitere Untersuchung funktioniert.
quelle
Wenn Sie LXD ausführen, ist dieser Befehl möglicherweise hilfreich, um die IP-Adresse eines ausgeführten Containers abzurufen
quelle
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
quelle
Lassen Sie dnsmasq das für Sie tun.
Konfigurieren Sie die dnsmasq-Instanz Ihres Hostcomputers so, dass die dnsmasq-Instanz von lxc nach der .lxc-Domäne der obersten Ebene abgefragt wird.
Kommentar in / etc / default / lxc-net entfernen:
Wenn die dnsmasq-Instanz Ihres Hosts von NetworkManager gestartet wird (wie dies bei den meisten aktuellen Ubuntu-Desktop-Installationen der Fall ist), erstellen Sie eine Datei mit dem Namen /etc/NetworkManager/dnsmasq.d/lxc.conf mit folgender Zeile:
Wenn dnsmasq Ihres Hosts nicht über NetworkManager gestartet wird, fügen Sie diese Zeile stattdessen zu /etc/dnsmasq.d-available/lxc hinzu:
Starten Sie dann die Dinge neu, damit sie die Änderungen übernehmen:
Möglicherweise müssen Sie Ihre lxc-Container neu starten oder neue DHCP-Leases anfordern, bevor sie in DNS angezeigt werden. (Ich erinnere mich nicht, ob es notwendig war, als ich das getan habe.) Es ist auch erwähnenswert, dass ich einen Fehlerbericht darüber gesehen habe, dass lxc-net dnsmasq-Änderungen nicht übernommen hat, als es neu gestartet wurde um sicher zu sein.
Dann probiere es aus:
quelle
Einfache Antwort ist
Wenn Sie sich nicht an den Containernamen erinnern, geben Sie einfach sudo lxc-ls -f ein.
quelle