本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 6 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

ntopng 是老牌开源流量监控工具:按网卡抓包,实时展示每台设备、每个协议、每个会话的流量排行,能定位「谁在偷偷跑满上行」。

它需要一个 Redis 存时序数据,抓包需要 NET_ADMIN 权限和 host 网络。

前置条件

  • 一台 Linux 服务器(2C2G 起,抓包吃 CPU);
  • 已安装 Docker 与 Compose v2;
  • 知道要抓的网卡名(ip -br link 查看,如 ens18、eth0)。
curl -fsSL https://get.docker.com | sh
mkdir -p /srv/docker/active/ntopng && cd /srv/docker/active/ntopng

镜像地址

ntop/ntopng:latest
redis:7-alpine

国内拉取慢可用镜像前缀:docker.1ms.run/ntop/ntopng:latest

目录结构

/srv/docker/active/ntopng/
├── docker-compose.yml
├── data/
│   ├── redis/
│   └── ntopng/
└── logs/

部署步骤

# docker-compose.yml
services:
  redis:
    image: redis:7-alpine
    container_name: ntopng-redis
    restart: always
    command: redis-server --appendonly yes
    ports:
      # 只监听回环,供 host 网络的 ntopng 访问
      - "127.0.0.1:6379:6379"
    volumes:
      - ./data/redis:/data

  ntopng:
    image: ntop/ntopng:latest
    container_name: ntopng
    restart: always
    network_mode: host
    cap_add:
      - NET_ADMIN
    depends_on:
      - redis
    environment:
      - NTOPNG_REDIS_HOST=localhost
      - NTOPNG_REDIS_PORT=6379
    volumes:
      - ./logs:/var/log/ntopng
      - ./data/ntopng:/var/lib/ntopng
    command: >
      -i <网卡名>
      --local-networks "192.168.0.0/16"
      --http-port 6532
      --dns-mode 1
# 查网卡名后替换 <网卡名>
ip -br link

docker compose up -d
docker compose logs -f --tail=100

浏览器打开 http://<SERVER_IP>:6532。

关键配置

项 说明
-i <网卡名> 抓包网卡,写错会启动失败,ip -br link 查
--http-port 6532 Web 端口,host 网络下直接访问
--local-networks 内网网段,决定「本地主机」分组
network_mode: host 抓包必需
cap_add: NET_ADMIN 抓包必需
Redis 时序数据后端,必须与 ntopng 通

注意事项

  • Redis 必须能被 host 网络的 ntopng 访问:示例里把 Redis 发布到 127.0.0.1:6379;如果不发布端口,localhost:6379 会连不上,时序图空白;
  • host 网络会占用宿主端口,6532 别和别的服务冲突;
  • 抓包在交换网络下只能看到本机流量,想看全网需要镜像端口/TAP;
  • 长时间运行 Redis 会持续增长,./data/redis 定期清理或设上限;
  • 需要流量留存/审计时再加 ClickHouse,CPU 和磁盘成本会明显上升;
  • 公网暴露前加认证,ntopng 能看到内网全部流量细节。

备份与升级

# 主要备份配置与 Redis 数据(可按需)
tar czf "ntopng-$(date +%F).tar.gz" ./data/redis

# 升级
docker compose pull
docker compose up -d
  • 升级后如果启动失败,先看 docker compose logs ntopng 里的网卡/权限报错。