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

2018-07-13  本文已影响17人  marshalzxy

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

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/下的信息可以看到关于此网络接口的统计数据

上一篇下一篇

猜你喜欢

热点阅读