我有 2 个 docker 容器,桥接如下:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef99087167cb images.docker.sae.sina.com.cn/ubuntu:latest /bin/bash -c /home/c 2 days ago Up 21 minutes 0.0.0.0:49240->22223/tcp night_leve3
c8a7b18ec20d images.docker.sae.sina.com.cn/ubuntu:latest /bin/bash -c /home/c 2 days ago Up 54 minutes 0.0.0.0:49239->22223/tcp night_leve2
#brctl show cbr0
bridge name bridge id STP enabled interfaces
docker0 8000.72b675c52895 no vethRQOy1I
vethjKYWka
我怎样才能得到哪个容器匹配
veth*
?ef99 => vethRQOy1I or ef99 => vethjKYWka
//------------------------------------------------ ----------
我知道它的工作原理是
ethtool
,但是有没有更好的方法? 最佳答案
这是上面提到的 ethtool 技巧的一个变体,实际上没有使用 ethtool:
function veth_interface_for_container() {
# Get the process ID for the container named ${1}:
local pid=$(docker inspect -f '{{.State.Pid}}' "${1}")
# Make the container's network namespace available to the ip-netns command:
mkdir -p /var/run/netns
ln -sf /proc/$pid/ns/net "/var/run/netns/${1}"
# Get the interface index of the container's eth0:
local index=$(ip netns exec "${1}" ip link show eth0 | head -n1 | sed s/:.*//)
# Increment the index to determine the veth index, which we assume is
# always one greater than the container's index:
let index=index+1
# Write the name of the veth interface to stdout:
ip link show | grep "^${index}:" | sed "s/${index}: \(.*\):.*/\1/"
# Clean up the netns symlink, since we don't need it anymore
rm -f "/var/run/netns/${1}"
}
关于networking - docker:如何轻松获得 veth 桥接接口(interface)对?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21724225/