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

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,800评论 0 7
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,544评论 0 120
  • 一、镜像相关 1、如何批量清理临时镜像文件 答:可以使用 docker rmi $(docker images -...
    天夭夭阅读 5,422评论 0 7
  • 情境管理 对于目前店铺的员工,手生的较多,应该给予明确的指令,形成固定的流程模式。让员工知道该怎样去做才是最重要的...
    张磊沙阅读 199评论 0 0
  • 《孙子兵法》言:“昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可...
    尘世知行者阅读 464评论 0 0