linux – 如何识别孤立的veth接口以及如何删除它们?
当我通过docker run启动任何容器时,我们得到一个新的
veth interface.删除容器后,应删除与容器链接的veth接口.但是,有时它会失败(然后容器启动出错):
root@hostname /home # ifconfig | grep veth | wc -l 53 root@hostname /home # docker run -d -P axibase/atsd -name axibase-atsd- 28381035d1ae2800dea51474c4dee9525f56c2347b1583f56131d8a23451a84e Error response from daemon: Cannot start container 28381035d1ae2800dea51474c4dee9525f56c2347b1583f56131d8a23451a84e: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 33359 -j DNAT --to-destination 172.17.2.136:8883 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1) root@hostname /home # ifconfig | grep veth | wc -l 55 root@hostname /home # docker rm -f 2838 2838 root@hostname /home # ifconfig | grep veth | wc -l 55 我如何识别哪些接口与现有容器链接,以及如何删除与已删除的对手链接的额外接口? 这种方式不起作用(通过root): ifconfig veth55d245e down brctl delbr veth55d245e can't delete bridge veth55d245e: Operation not permitted 现在由传输流量定义的额外接口(如果没有活动,则是额外接口). UPDATE root@hostname ~ # uname -a Linux hostname 3.13.0-53-generic #89-Ubuntu SMP Wed May 20 10:34:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux root@hostname ~ # docker info Containers: 10 Images: 273 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 502 Dirperm1 Supported: false Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.13.0-53-generic Operating System: Ubuntu 14.04.2 LTS CPUs: 8 Total Memory: 47.16 GiB Name: hostname ID: 3SQM:44OG:77HJ:GBAU:2OWZ:C5CN:UWDV:JHRZ:LM7L:FJUN:AGUQ:HFAL WARNING: No swap limit support root@hostname ~ # docker version Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d OS/Arch (server): linux/amd64 解决方法
这里有三个问题:
>启动单个容器不应该将系统上的veth接口数增加2,因为当Docker创建一个veth对时,该对的一端在容器命名空间中被隔离,并且在主机中不可见. Error response from daemon: Cannot start container ... > Docker应该自动清理veth接口. 这些事实让我怀疑你的环境中存在根本性的错误.您能否更新您的问题,详细说明您正在使用的分发版,哪个内核版本以及哪个Docker版本?
关于手动删除veth接口:veth接口不是桥接器,所以当然你不能用brctl删除它. 要删除veth接口: # ip link delete <ifname> 检测“空闲”接口是一个棘手的问题,因为如果你只是看流量,你可能会意外删除仍在使用但没有看到太多活动的东西. 我认为你真正想要寻找的是veth接口,其对等体在全局网络命名空间中也是可见的.您可以使用these instructions找到veth接口的对等体,然后查看该接口是否可见,然后删除其中一个(删除veth接口也将删除其对等体)将是一件简单的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 有没有办法在bash中进入随机目录?
- 在RedHat / Centos上安装Python 2.5
- 如何在linux下使用realpath()以编程方式获取文件的绝对路径
- Linux 将文件打包、压缩并分割成指定大小
- Linux framebuffer测试程序
- 为什么我不能在awk中使用字符串“?B?”作为分隔符.
- linux – 我在哪里可以获得krb5-libs和krb5-workstation?
- linux – 在个人计算机上安全地存储AWS凭据
- Getting over the dangers of rm command in Linux---refer
- linux – 如何找到另一个文件中缺少的行