查看docker容器内部Redis的TCP连接问题
前言
在一次生产环境中偶然发现Redis的连接数特别大,于是很好奇想知道为什么或者具体哪些服务连接了当前Redis。想必大家都会觉得这个问题还是比较简单的,会想起netstat命令。但是因为当时的redis是docker容器部署的方式在宿主机执行netstat -lptn | grep 6379 怎么也查询不出来。于是开始各种搜索解决方案。实践存在两种方式:(本文推荐第二种方式)
- 第一种docker exec进容器操作
netstat -lptn | grep 6379 - 第二种使用
nsenter -t <pid> -n netstat
提示:以下是是第二种方式的操作过程
一、nsenter是什么?
nsenter命令是一个可以在指定进程的命令空间(比如docker容器)下运行指定程序的命令。
简单理解就是在宿主机上可以直接执行容器内部的shell命令,也可以在容器内部直接操作宿主机外部的shell命令。
这里重点nsenter具体怎么用就不多说了,想了解的可以网查查下很简单。
二、Redis连接情况分析
1、Redis容器进程ID
containerid容器ID
docker inspect -f '{{.State.Pid}}' <containerid>
- 查询结果
[hz_dev@node-12 ~]$ docker inspect -f '{{.State.Pid}}' d6fe0565449b
12599
12599为当前redis容器的进程ID
2、查询Redis tcp连接
pid为:12599
nsenter -t <pid> -n netstat -pn
- 查询结果
nsenter -t 12599 -n netstat -pn

从上图可知容器内部的6379Redis被容器内部51420客户端连接上了。
三、总结
nsenter -t 12599 -n netstat -pn
简单分析下这个命令结构:

- 红色部分:nsenter -t 12599 -n为nsenter的执行前缀。
- 黄色部分:netstat -pn为实际需要执行的命令。
如果说你想在宿主机执行容器内部的ifconfig命令:nsenter -t 12599 -n ifconfig

这个就是查看到了容器内部网卡的数据了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Docker下安装Mongo4.2及客户端工具连接Mongo
这篇文章主要介绍了Docker下安装Mongo4.2和客户端工具连接Mongo数据库的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-01-01
Docker安装MySQL并使用Navicat连接的操作方法
这篇文章主要介绍了Docker安装MySQL并使用Navicat连接,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09


最新评论