一 环境准备
虚拟机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
此时就可以使用容器内本不存在的命令。