查看docker容器內(nèi)部Redis的TCP連接問題
前言
在一次生產(chǎn)環(huán)境中偶然發(fā)現(xiàn)Redis的連接數(shù)特別大,于是很好奇想知道為什么或者具體哪些服務(wù)連接了當(dāng)前Redis。想必大家都會覺得這個問題還是比較簡單的,會想起netstat命令。但是因為當(dāng)時的redis是docker容器部署的方式在宿主機(jī)執(zhí)行netstat -lptn | grep 6379 怎么也查詢不出來。于是開始各種搜索解決方案。實踐存在兩種方式:(本文推薦第二種方式)
- 第一種docker exec進(jìn)容器操作
netstat -lptn | grep 6379 - 第二種使用
nsenter -t <pid> -n netstat
提示:以下是是第二種方式的操作過程
一、nsenter是什么?
nsenter命令是一個可以在指定進(jìn)程的命令空間(比如docker容器)下運行指定程序的命令。
簡單理解就是在宿主機(jī)上可以直接執(zhí)行容器內(nèi)部的shell命令,也可以在容器內(nèi)部直接操作宿主機(jī)外部的shell命令。
這里重點nsenter具體怎么用就不多說了,想了解的可以網(wǎng)查查下很簡單。
二、Redis連接情況分析
1、Redis容器進(jìn)程ID
containerid容器ID
docker inspect -f '{{.State.Pid}}' <containerid>
- 查詢結(jié)果
[hz_dev@node-12 ~]$ docker inspect -f '{{.State.Pid}}' d6fe0565449b
12599
12599為當(dāng)前redis容器的進(jìn)程ID
2、查詢Redis tcp連接
pid為:12599
nsenter -t <pid> -n netstat -pn
- 查詢結(jié)果
nsenter -t 12599 -n netstat -pn

從上圖可知容器內(nèi)部的6379Redis被容器內(nèi)部51420客戶端連接上了。
三、總結(jié)
nsenter -t 12599 -n netstat -pn
簡單分析下這個命令結(jié)構(gòu):

- 紅色部分:nsenter -t 12599 -n為nsenter的執(zhí)行前綴。
- 黃色部分:netstat -pn為實際需要執(zhí)行的命令。
如果說你想在宿主機(jī)執(zhí)行容器內(nèi)部的ifconfig命令:nsenter -t 12599 -n ifconfig

這個就是查看到了容器內(nèi)部網(wǎng)卡的數(shù)據(jù)了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
遷移docker部署的gitlab過程(經(jīng)實戰(zhàn))
本文詳細(xì)描述了如何將Docker部署的GitLab數(shù)據(jù)遷移到另一塊硬盤的過程,包括包括停止容器、遷移數(shù)據(jù)卷、修改掛載路徑、修正權(quán)限和重啟容器等等每一步驟都有詳細(xì)的說明確保遷移過程的安全性和有效性2026-05-05
docker-compose限制容器cpu和內(nèi)存方式
這篇文章主要介紹了docker-compose限制容器cpu和內(nèi)存方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

