美文网首页
如何在主机上直接操作容器

如何在主机上直接操作容器

作者: marshalzxy | 来源:发表于2018-07-13 14:16 被阅读17次

    一、进入容器网络命名空间进程操作

    step1、docker inspect -f ‘{{.State.Pid}} ‘ 容器id

    8848

    step2、ls -li /proc/8848/ns/net

    /proc/8848/ns/net -> net:[4026536068]

    这一步中【】里面的是命名空间的inodeid号,非命名空间文件名。

    方法一

    Step3、ls -li /var/run/docker/netns/

    4026536068          154c4c4c051e

    这里显示netns下有一个名为154c4c051e的文件,它的inode号为4026536068

    Step4、nsenter --net=/var/run/docker/netns/154c4c4c051e cmd

    方法二、

    首先通过docker inspect查询到容器主进程pid

    然后通过 nsenter -n -t pid cmd 直接向pid下的networknamespace执行命令。

    nsenter命令参数-n表示进入networknamespace

    -m 表示mount ns

    -u 表示utsns

    -i 表示ipcns

    -p pidns

    -u userns

    方法三

    step4、 ln -s /var/run/docker/netns /var/run/netns 因为默认ip netns命令只操作/var/run/netns下的具名network namespace,所以在这一步创建这个链接。

    step5、 ip netns list 这下可以看到有一个名为154c4c4c051e的namespace

    step6、ip netns exec 154c4c4c051e cmd

    方法四

    在方法三基础上step6执行:

    ip netns exec 154c4c4c051e bash 可以在该网络命名空间下启动一个bash,在此bash下可以执行任何命令。

    exit即可推出此bash

    二、将某个网络设置移到容器中

    ip link set dev ethxx netns networknamespace名

    要想上述命令执行成功,需要先执行ln -s /var/run/docker/netns /var/run/netns

    三、向容器中添加一个额外的veth设备

    step1、通过上述步骤找到容器的network namespace

    step2、添加veth设备对

    ip link add veth-1 type veth  peer name veth-2

    通过ip a命令可以看到出现了两个veth设备:veth1和veth2

    step3、通过

    ip link set dev veth-1 netns xxxx将veth-1加入到xxx网络命名空间里

    在没有ip,ifconfig命令的情况下看网络的接口:

    1、通过ls /sys/class/net/ 可以看到当前命名空间所有的网路接口。

    2、通过cat /sys/class/net/if-name/address 可以看到if-name网络接口下的mac地址

    通过/sys/class/net/if-name/address/statistic/下的信息可以看到关于此网络接口的统计数据

    相关文章

      网友评论

          本文标题:如何在主机上直接操作容器

          本文链接:https://www.haomeiwen.com/subject/xvwjpftx.html