Mencari tahu antarmuka # veth dari wadah buruh pelabuhan
11
Saya memiliki ratusan kontainer di berbagai peranti lunak switch virtual. Saya ingin tahu apakah mungkin untuk mengetahui vnet # mana yang menjadi milik buruh pelabuhan. Saat ini, saya mendeteksi bahwa dengan menonton syslog ketika setiap wadah dibuat. Di KVM, ada perintah "virsh domiflist", yang persis seperti yang saya cari.
Terima kasih, tetapi karena suatu alasan tidak selalu berhasil. Saya memiliki 50 kontainer, dan skrip di atas akan mengembalikan 1 atau 2 kosong. Ketika saya melihat nilai iflink untuk kedua wadah, mereka bukan +1 dari nilai yang diperoleh dari dalam wadah.
user2066671
Ini dugaan: Ini bisa jadi masalah waktu. Jika kontainer dibuat terlalu cepat setelah satu sama lain, maka menetapkan iflinknilai mungkin tidak sinkron. Sistem mungkin menetapkan dua iflinknilai berturut-turut ke dua wadah, alih-alih bergantian antara wadah dan sistem.
NZD
Ini menarik, saya membuat dan menjalankan kontainer dalam for loop, iflink wadah terakhir selalu sangat berbeda. Sebagai contoh, iflink dari / sys / class / net / veth ### / iflink mengembalikan 4205, tetapi penampil / sys / class / eth0 / iflink menunjukkan 4216
user2066671
Mengalahkan saya. Saya mencoba beberapa hal: memulai banyak wadah, memverifikasi bahwa iflinkantrean bagus. Menghentikan beberapa kontainer dan membuat beberapa yang baru, diverifikasi yang iflinkmasih berbaris dengan baik. Saya menjalankan 115 kontainer dan tertinggi saya iflinkadalah 244. Bagaimana Anda bisa mencapai 4216?
NZD
Saya juga memeriksa posting saya mendapat informasi dari. Ini menyatakan: "Ini dapat ditemukan dengan mencocokkan nilai antarmuka kontainer iflinkdengan vethnilai ifindex antarmuka host ". Script saya gunakan iflinkuntuk keduanya. Mungkin coba 'ifindex' untuk 'veth'?
NZD
3
mencari semua antarmuka dalam wadah.
#!/bin/bash
for container in $(docker ps --format '{{.Names}}'); do
iflink=`docker exec -it $container bash -c 'cat /sys/class/net/eth*/iflink'`
for net in $iflink;do
net=`echo $net|tr -d '\r'`
veth=`grep -l $net /sys/class/net/veth*/ifindex`
veth=`echo $veth|sed -e 's;^.*net/\(.*\)/ifindex$;\1;'`
echo $container:$veth
done
done
iflink
nilai mungkin tidak sinkron. Sistem mungkin menetapkan duaiflink
nilai berturut-turut ke dua wadah, alih-alih bergantian antara wadah dan sistem.iflink
antrean bagus. Menghentikan beberapa kontainer dan membuat beberapa yang baru, diverifikasi yangiflink
masih berbaris dengan baik. Saya menjalankan 115 kontainer dan tertinggi sayaiflink
adalah 244. Bagaimana Anda bisa mencapai 4216?iflink
denganveth
nilai ifindex antarmuka host ". Script saya gunakaniflink
untuk keduanya. Mungkin coba 'ifindex' untuk 'veth'?mencari semua antarmuka dalam wadah.
sumber
Saya menggunakan metode yang berbeda, yang sepertinya berfungsi dengan baik:
sumber