具有价值的微网站建设,做株洲网站需要多少钱,海南澄迈网站建设,wordpress和onethink查看容器对应宿主机上面的pid#xff0c;容器技术的实质是进程#xff0c;并没有完整的操作系统#xff0c;就相当于在主机上面fork了一个子进程#xff0c;通过docker daemon去fork一个子进程#xff0c;这个子进程是可以在主机上面看到其pid的。 $ docker inspect -f {…查看容器对应宿主机上面的pid容器技术的实质是进程并没有完整的操作系统就相当于在主机上面fork了一个子进程通过docker daemon去fork一个子进程这个子进程是可以在主机上面看到其pid的。 $ docker inspect -f {{.State.Pid}} 容器名或者容器id 如下 $ docker inspect -f {{.State.Pid}} 7b7af641a02d 20560 $ docker inspect -f {{.State.Pid}} consul_client 20560 输入该命令便进入到容器中 $ nsenter --target 上面查到的进程id --mount --uts --ipc --net --pid 解释nsenter指令中进程id之后的参数的含义 * –mount参数是进去到mount namespace中 文件系统 * –uts参数是进入到uts namespace中 主机名与域名 * –ipc参数是进入到System V IPC namaspace中 信号量、消息队列和共享内容 * –net参数是进入到network namespace中 网络设备、网络栈、端口 * –pid参数是进入到pid namespace中 进程编号 * –user参数是进入到user namespace中 用户和用户组 PID$(docker inspect --format {{ .State.Pid }} container)
$ nsenter --target $PID --mount --uts --ipc --net --pid#查看容器对应宿主机上面的pid容器技术的实质是进程并没有完整的操作系统就相当于在主机上面fork了一个子进程通过docker daemon去fork一个子进程这个子进程是可以在主机上面看到其pid的。
[rootdocker ~]# docker inspect 37d084d8e21b | grep -i pidPid: 18496,PidMode: ,PidsLimit: null,
[rootdocker ~]# ps -ef | grep 18496
root 18496 18476 0 15:34 pts/0 00:00:00 sh
-p 是pid namesapce -n是network namespace在主机上面通过nsenter去敲ip aps命令和在容器内部敲的命令返回结果是一样的。
[rootdocker ~]# nsenter -t 18496 -n ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
44: eth0if45: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever[rootdocker ~]# nsenter -t 18496 -p psPID TTY TIME CMD
18648 pts/1 00:00:00 sh
20436 pts/1 00:00:00 bash
21368 pts/1 00:00:00 nsenter
21369 pts/1 00:00:00 bash
21529 pts/1 00:00:00 nsenter
21530 pts/1 00:00:00 ps
容器看到的是可以通过在主机上面nsenter看到的。这是日常去调试容器里面进程应用的一个法宝
有些时候容器里面要做一些debug缺一些工具可以登入到主机上面进入到容器的namespace里面去看其网络配置看其端口监听。这样就能够知道网络连接的状态是怎么样的。
由于使用DOCKER的时候ESTABLISHED连接不会出现在netstat中在运行中的docker容器中列出打开的套接字的方法 ,查找docker的进程号
$ sudo nsenter -t Pid -n netstat | grep ESTABLISHED 示例
$ nsenter -t 1829 -n netstat |grep ESTABLISHED
tcp 0 0 localhost:60353 localhost:epmd ESTABLISHED
tcp 0 0 localhost:epmd localhost:60353 ESTABLISHED
tcp 0 0 localhost.localdo:15672 192.168.56.1:59679 ESTABLISHED
tcp6 0 0 172.17.0.2:amqp 192.168.56.1:59898 ESTABLISHED
tcp6 21 0 172.17.0.2:amqp 192.168.56.1:59571 ESTABLISHED[rootjenkins dockerfile]# nsenter -t 14632 -n ping www.baidu.com
^C[rootjenkins dockerfile]# nsenter -t 14632 -n nslookup www.baidu.com
^C[rootjenkins dockerfile]# nsenter -t 14632 -n curl 127.0.0.1:8080
{timestamp:2024-05-09T06:29:54.34600:00,status:404,error:Not Found,message:,path:/}