Saya telah menulis beberapa skrip untuk mengelola wadah LXC, dan saya bisa mendapatkan alamat IP mereka melalui ifconfig, dengan asumsi saya terhubung ke konsol.
Saya sekarang ingin terhubung ke wadah ini melalui ssh. Bagaimana cara saya mendapatkan alamat IP sedemikian rupa sehingga saya bisa menulis skrip? Saya juga tidak ingin mengatur alamat secara manual (tapi saya akan melakukannya, kalau itu satu-satunya pilihan).
Sejauh ini, saya sudah mencoba menggunakan lxc-start
, tetapi mesin tidak memiliki alamat IP sebelum saya jalankan /sbin/init
.
Jawaban:
Cara termudah untuk melakukan ini sekarang adalah:
Ini mengembalikan alamat IP tanpa teks lain.
The
-i
pilihan menentukan bahwa alamat IP harus dikembalikan dan-H
Menonaktifkan opsi manusia keluaran dibaca yaitu label. Untuk info lebih lanjut lihat LXC-info halaman manual .EDIT untuk versi LXC yang lebih baru:
lxc info container-name
Maka Anda mendapatkan info rinci. Lihatlah blok "Ips:", yang seharusnya terlihat seperti yang di bawah ini. Anda mungkin harus mengambil alamat IPv4 pertama (
10.121.48.241
) dalam kasus ini:sumber
Melihat menjalankan hal-hal dalam wadah tampaknya tidak didukung di Ubuntu, saran terbaik saya berikutnya adalah untuk melihat penyewaan alamat IP yang
dnsmasq
dibagikan. Itu sangat sederhana:Hanya ada dua bagian yang bisa digunakan, jadi kita bisa memformatnya jauh lebih bagus:
sumber
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Secara teknis Anda harus bisa menggunakannya
lxc-attach
untuk menghubungkan dan menjalankan perintah (dan memproses output), seperti:Ini membutuhkan wadah untuk berjalan.
Catatan: Saya tidak bisa mengaktifkan ini. Saya menginstal LXC dan mencoba ini tetapi hanya melihat sedikit kesalahan namespace, file yang hilang dan omong kosong lainnya. Tapi satu-satunya pengalaman saya dengan LXC adalah 10 menit yang saya habiskan untuk pertanyaan ini. Mungkin berhasil. Mungkin tidak. Semoga berhasil!
sumber
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
jika Anda hanya menginginkan alamat IP.No such file or directory - failed to open '/proc/28741/ns/pid'
danfailed to enter the namespace
. Saya menemukan bug yang menggambarkan masalah dengan tepat, tetapi berasal dari 2010.Ini berfungsi di Ubuntu 14.04:
dan jika Anda hanya menginginkan alamat IP (berguna untuk skrip), (terima kasih @JulianHLam):
sumber
lxc-info -n $name -Hi
untuk mendapatkan IP tanpa spasi putihAtau permintaan dnsmasq (yang memberikan IP ke kontainer)
sumber
Versi python untuk melakukannya:
sumber
Perintah di bawah ini menggantikan
lxc-attach
contoh di posting sebelumnyaItu berjalan
ifconfig
di dalam wadah dan menunjukkan output.Sepertinya ada sesuatu yang tidak dikonfigurasi dengan benar. Sebagai solusi, saya telah menggunakan templat konfigurasi yang disediakan oleh dokumentasi LXC untuk membuatnya berfungsi tanpa penyelidikan lebih lanjut.
sumber
Jika Anda menjalankan LXD, Anda mungkin menemukan perintah ini berguna untuk mendapatkan alamat IP wadah yang sedang berjalan
sumber
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
sumber
Biarkan dnsmasq melakukannya untuk Anda.
Konfigurasikan instance dnsmasq mesin host Anda ke kueri instance dnsmasq lxc untuk domain tingkat atas .lxc.
Di / etc / default / lxc-net, batalkan komentar pada baris ini:
Jika instance dnsmasq host Anda diluncurkan oleh NetworkManager (seperti halnya dengan kebanyakan instalasi desktop Ubuntu saat ini) buat file bernama /etc/NetworkManager/dnsmasq.d/lxc.conf dengan baris di dalam ini:
Jika dnsmasq host Anda diluncurkan oleh sesuatu selain NetworkManager, tambahkan baris itu ke /etc/dnsmasq.d- sebagai gantinya / lxc sebagai gantinya:
Kemudian mulai kembali hal-hal sehingga mereka mengambil perubahan:
Anda mungkin harus memulai ulang wadah lxc Anda atau membuatnya meminta penyewaan DHCP baru sebelum muncul di DNS. (Saya tidak ingat apakah itu perlu ketika saya melakukan ini.) Ini juga layak disebutkan bahwa saya melihat laporan bug tentang lxc-net tidak menerima perubahan dnsmasq ketika restart, jadi Anda mungkin ingin me-reboot sistem host Anda hanya untuk memastikan.
Kemudian cobalah:
sumber
Jawaban sederhana adalah
Jika Anda tidak ingat nama containernya, ketik saja sudo lxc-ls -f.
sumber