একটি ডকারের ধারকটির Veth # ইন্টারফেসের সন্ধান করা


11

বিভিন্ন সফ্টওয়্যার ভার্চুয়াল সুইচে আমার কয়েকশ পাত্রে রয়েছে। আমি জানতে চাই যে এটি কোন ভিএনটি # কোন ডকারের ধারকটির সাথে সম্পর্কিত তা সন্ধান করা সম্ভব কিনা। এখনই, আমি সনাক্ত করছি যে প্রতিটি কন্টেইনার তৈরি হওয়ার সাথে সাথে সিসলগ দেখে। কেভিএম-তে একটি কমান্ড রয়েছে "বীরশ ডোমিফালিস্ট", যা ঠিক আমি খুঁজছি।

উত্তর:


15

iflinkপাত্রের হিসাবে একই ifindexএর veth#

আপনি iflinkনীচের হিসাবে ধারকটি পেতে পারেন :

docker exec -it <container-name> bash -c 'cat /sys/class/net/eth0/iflink'

বলুন, এর ফলস্বরূপ 12, তারপরে grep:

grep -l 12 /sys/class/net/veth*/ifindex

এটি আমার সিস্টেমে একটি অনন্য ফলাফল দেবে:

/sys/class/net/veth11d4238/ifindex

এটি একটি স্ক্রিপ্টে একত্রিত করুন:

#!/bin/bash

for container in $(docker ps -q); do
    iflink=`docker exec -it $container bash -c 'cat /sys/class/net/eth0/iflink'`
    iflink=`echo $iflink|tr -d '\r'`
    veth=`grep -l $iflink /sys/class/net/veth*/ifindex`
    veth=`echo $veth|sed -e 's;^.*net/\(.*\)/ifindex$;\1;'`
    echo $container:$veth
done

স্ক্রিপ্টটি অনুসরণ করা সহজ হওয়ার জন্য লেখা হয়েছিল।

নমুনা রান:

$ docker ps -q
c4d8096eff43
34ac6e9f1e6e
d5a2aa5f3de3

$ sudo ./vethfinder
c4d8096eff43:veth11d4238
34ac6e9f1e6e:veth7d52cd1
d5a2aa5f3de3:vethe46073d

তথ্যসূত্র: https://forums.docker.com/t/referenceship-between-interface-vethxxxxx-and-container/12872/20


আপনাকে ধন্যবাদ, তবে এটি কোনও কারণে সর্বদা কার্যকর হয় না। আমার কাছে 50 টি ধারক রয়েছে এবং উপরের স্ক্রিপ্টটিতে 1 বা 2 টি ফাঁকা ফিরবে। আমি যখন উভয় ধারকগুলির জন্য iflink মানটি দেখি, তখন সেগুলি ধারকটির অভ্যন্তর থেকে প্রাপ্ত মান থেকে +1 হয় না।
ব্যবহারকারী 2066671

এটি অনুমান: এটি একটি সময় সমস্যা হতে পারে। যদি একে অপরের পরে খুব দ্রুত পাত্রে তৈরি হয়, তবে iflinkমানগুলি নির্ধারণ করা সিঙ্কের বাইরে চলে যেতে পারে। সিস্টেমটি iflinkধারক এবং সিস্টেমের মধ্যে বিকল্প পরিবর্তে দুটি পাত্রে পরপর দুটি মান নির্ধারণ করতে পারে ।
এনজেডডি

এটি আকর্ষণীয়, আমি একটি লুপের জন্য কনটেইনারগুলি তৈরি এবং চালিত করি, শেষ পাত্রে iflink সর্বদা খুব আলাদা। উদাহরণস্বরূপ, / sys / শ্রেণি / নেট / ভিসা ### / iflink 4205 প্রদান করে, তবে ধারকটির / sys / শ্রেণি / এথ0 / iflink দেখায় 4216
ব্যবহারকারী 2066671

আমাকে মারছে। আমি কয়েকটি জিনিস চেষ্টা করেছিলাম: একগুচ্ছ পাত্রে শুরু করে, সেই iflinkলাইনগুলি সুন্দরভাবে যাচাই করেছি । কয়েকটি ধারক থামিয়েছে এবং কয়েকটি নতুন তৈরি করেছে, যাচাই করা হয়েছে যে iflinkএখনও দুর্দান্তভাবে রেখেছে। আমি 115 টি পাত্রে চালিত হয়েছি এবং আমার সর্বোচ্চ iflink244 ছিল you আপনি কীভাবে 4216 এ যাবেন?
এনজেডডি

আমি পোস্টটিও পরীক্ষা করেছিলাম যা থেকে আমি তথ্য পেয়েছি। এতে বলা হয়েছে: "এটি iflinkএকটি হোস্ট vethইন্টারফেসের ifindex মানের সাথে একটি ধারক ইন্টারফেসের মানটি মিলিয়ে খুঁজে পাওয়া যাবে "। আমার স্ক্রিপ্ট iflinkউভয়ের জন্য ব্যবহার করে। সম্ভবত 'veth' জন্য 'ifindex' চেষ্টা?
এনজেডডি

3

পাত্রে সমস্ত ইন্টারফেসের জন্য অনুসন্ধান।

#!/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

1

আমি একটি ভিন্ন পদ্ধতি ব্যবহার করছি, যা মনে হয় ঠিক ঠিক কাজ করে:

[root@kh1 ~]# docker inspect 6d48e279c5b8 --format '{{.State.Pid}}'                                                                                                                                                                                                              
56316
[root@kh1 ~]# 
[root@kh1 ~]# ip netns identify 56316
ns-56316
[root@kh1 ~]# 
[root@kh1 ~]# ip netns list | grep ns-56316
ns-56316 (id: 6)
[root@kh1 ~]# 
[root@kh1 ~]# ip link show | grep -B1 "link-netnsid 6"
330: veth1ce76e2b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master cni0 state UP mode DEFAULT group default 
    link/ether de:f8:ce:a2:85:f9 brd ff:ff:ff:ff:ff:ff link-netnsid 6

আমি একটি সরঞ্জাম তৈরি করেছি যা উপরের পদক্ষেপগুলি স্বয়ংক্রিয়ভাবে করে। আপনি লিনাক্স x86_64 বাইনারি ডাউনলোড করতে পারেন এখান
mhristache
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.