使用nsenter检查docker网络

文章讲述了如何在没有ping等基本命令的Docker容器中,利用宿主机的nsenter工具进入容器的命令空间,执行如ping这样的网络调试操作。通过获取容器的进程ID,然后使用nsenter-n-t命令进入该进程的网络命名空间,从而使用原本容器内不存在的命令。
摘要由CSDN通过智能技术生成

一 环境准备

虚拟机IP:10.0.0.100
拉取的三个镜像,镜像名称与ID如下:

[root@canway01 ~]# docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx             latest              f9c14fe76d50        2 hours ago         143 MB
docker.io/centos            6.9                 2199b8eb8390        4 years ago         195 MB
docker.io/google/cadvisor   latest              eb1210707573        4 years ago         69.6 MB

运行以下命令,交互式启动容器:

docker container run -it 2199b8eb8390

检查容器状态:

[root@canway01 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
354fd8ba2770        2199b8eb8390        "/bin/bash"              33 minutes ago      Up 33 minutes                                suspicious_yalow

镜像为centos:6.9的容器已经运行

二 需求

举一个最简单的例子,许多容器由于为了轻量化,没有安装Linux最基本的命令工具,如果想要ping其他IP,就会因为没有ping命令而十分尴尬。

三 解决

nsenter是一个可以在指定进程的命令空间下运行指定程序的命令,它最典型的用途就是进入容器的网络命令空间。

虽然容器没有ping命令,但是可以使用容器外的宿主机的命令工具,实现网络的debug。

首先检查该容器的进程。
上述检查容器状态,我们得到了该容器的ID。354fd8ba2770

[root@canway01 ~]# docker inspect -f {{.State.Pid}} 354fd8ba2770
96248

得到了容器进程的ID 96248

接着使用nsenter命令

[root@canway01 ~]# nsenter -n -t 96248

此时就可以使用容器内本不存在的命令。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值