如何查看docker容器内部Redis的TCP连接情况

文章介绍了如何在Docker容器环境下,通过nsenter命令进入Redis容器并使用netstat查询连接详情。当遇到Redis连接数异常增大时,作者通过获取容器进程ID,然后使用nsenter-t<pid>-nnetstat-pn命令在容器内查看连接状态,发现有内部客户端51420连接到6379端口的Redis服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在一次生产环境中偶然发现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
在这里插入图片描述
这个就是查看到了容器内部网卡的数据了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值