通过命名空间namespace查看容器内端口的外部连接情况

1、在宿主机上查找容器的进程号:

docker inspect -f {{.State.Pid}} nginx

2、进入该进程的network命名空间,然后查看相应端口的外部连接情况

nsenter -n -t 36156

3、可以使用watch命令持续监视

watch "netstat -antupl |grep 80"

4、编写shell脚本docker_aip.sh来获取访问IP信息

脚本功能

  • 获取 Nginx 容器 PID

  • 进入容器网络 namespace 查看 80 端口连接

  • 过滤掉 0.0.0.0、去重

  • 输出 当前时间 + 有效 IPaccess.log

  • 自动处理异常(容器不存在、无连接等)

#!/bin/bash

# 切换到脚本所在的目录
cd "$(dirname "$0")"

# 1. 获取 Nginx 容器 PID
NGINX_PID=$(docker inspect -f '{{.State.Pid}}' nginx 2>/dev/null)

# 判断容器是否存在/运行
if [ -z "$NGINX_PID" ] || [ "$NGINX_PID" = "0" ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误:未找到运行中的 nginx 容器" >> access.log
    exit 1
fi

# 2. 进入容器网络空间获取 80 端口连接 IP
# 解析目标IP(外部访问nginx的客户端IP)
IP_LIST=$(nsenter -n -t "$NGINX_PID" netstat -tan 2>/dev/null | \
    grep ":80" | \
    awk '{print $5}' | \
    cut -d: -f1 | \
    grep -v '0.0.0.0' | \
    grep -v '::' | \
    sort | uniq)

# 3. 如果没有有效IP,记录日志
if [ -z "$IP_LIST" ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 无有效80端口连接" >> access.log
    exit 0
fi

# 4. 逐行输出 时间 + IP 到日志
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
echo "$IP_LIST" | while read -r IP; do
    if [ -n "$IP" ]; then
        echo "[$CURRENT_TIME] 有效连接IP:$IP" >> access.log
    fi
done

5、执行脚本

watch docker_aip.sh

6、查看输出

cat access.log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值