有些镜像为了实现轻量化,有很多命令是没有的。但有时候,当我们想要执行的某些命令时,就不得不先安装一下。有些命令可能只是临时用一下,安装的代价太大了。
这里提供一种思路,可以不在容器内安装,就能在容器内执行某些命令。
创建一个名为centos1的容器,想查看网卡信息,但是发现没有ip命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e3MgkBuR-1667633837001)(宿主机的命令在容器内执行.assets/image-20221105150247290.png)]
在不想安装ip命令的情况下,可以在宿主机上先通过docker inspect 获取容器的进程号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVliY95O-1667633837003)(宿主机的命令在容器内执行.assets/image-20221105150218120.png)]
然后在宿主机通过 nsenter 命令,进入pid的network namespace 执行ip命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJkkwaGT-1667633837003)(宿主机的命令在容器内执行.assets/image-20221105150519550.png)]
可以发现已经打印出了centos1容器的网卡信息。
nsenter 出了可以在指定进程的network namespace中执行命令,在另外5个namespace也可以执行一些命令,这里就不在赘述了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gPFmNVCA-1667633837004)(宿主机的命令在容器内执行.assets/image-20221105153012275.png)]