使用nsenter检查docker网络

一 环境准备

虚拟机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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/oldboy1999/article/details/130860508