Docker部署AI视频分析平台问题清单:环境、参数、验证和排错

在港口码头的闸口、堆场、岸桥、仓库及危险品区等高危作业场景中,反光衣识别任务是保障安全生产的重要防线。由于港口环境复杂、视频通道数量多且网络环境各异,在私有化部署时使用 Docker 架构是保证服务快速交付与环境隔离的标准做法。

本文作为一名部署工程师的实战笔记,整理了一套针对港口码头场景的 Docker部署AI视频分析平台 全流程指南,涵盖部署前的准备清单、部署中的验证手段以及部署后的排查方法。

适用场景

本指南适用于港口码头的私有化边缘分析与中心化部署场景,具体防区包括:

  • 闸口/出入口:进出集卡司机与作业人员穿戴合规检测。

  • 堆场/仓库:高空吊装与堆垛区域人员违规闯入及反光衣检测。

  • 岸桥/危险品区:高风险作业区全天候人员安全防护监测。

关联核心算法任务:反光衣穿戴检测算法(YOLOv8/TensorRT)

准备清单

部署前请按下表逐一核对硬件与软件环境配置,避免因环境不兼容导致部署中断:

检查项 参数要求 / 建议基线 本地确认
操作系统 Ubuntu 22.04 LTS / CentOS 7.9 (Linux x86_64)
CPU/算力 Intel Xeon 16核 3.2GHz 及以上
GPU / NPU NVIDIA RTX 4090 (24GB) / NVIDIA A2000 x 2
GPU 驱动/CUDA NVIDIA Driver 525.85, CUDA 12.0
Docker 环境 Docker Engine 24.0.0, Docker Compose v2.20
GPU 容器运行时 NVIDIA Container Toolkit (nvidia-docker2) 已安装
内存/磁盘 内存 64GB,系统盘 100GB,数据盘 1TB NVMe SSD
网络与并发 局域网带宽 1Gbps,预留 16-32 路 RTSP 流吞吐
摄像头数量 单节点接入 16 路 1080P@15fps H.264 摄像头

关键参数表

以下为平台核心服务、端口映射、卷挂载路径及核心配置项说明:

服务名称 内部/外部端口 镜像路径/环境变量 宿主机挂载目录 核心作用
zlm-media 554:554 (RTSP) 8080:8080 (HTTP) harbor.internal/aip/zlm:v3.2 /opt/aip/media/logs:/var/log/zlm 流媒体转发与拉流服务
algo-infer 9000:9000 (gRPC) harbor.internal/aip/algo-vest:v2.4 /opt/aip/models:/app/models /dev/shm:/dev/shm 基于 NVDEC/TensorRT 的算法推理引擎
platform-service 8000:8000 (Web API) harbor.internal/aip/platform:v1.8 /opt/aip/platform/logs:/app/logs /opt/aip/data/snaps:/app/snaps 业务逻辑、通道管理与告警中心
redis-cache 6379:6379 redis:7.0-alpine /opt/aip/redis/data:/data 任务状态去重与高频告警缓存

操作流程

整体部署分为六个阶段,请严格按顺序执行:

Plaintext

复制代码
[1. 准备环境] ➔ [2. 拉取/导入镜像] ➔ [3. 配置文件修改] ➔ [4. 启动容器集群] ➔ [5. 功能与流水验证] ➔ [6. 正式上线监控]

1. 准备(环境初始化)

创建宿主机持久化目录结构,并配置 NVIDIA Docker 运行时:

Bash

复制代码
# 创建统一数据与日志目录
mkdir -p /opt/aip/{media,models,platform,redis,data/snaps} /opt/aip/platform/logs

# 验证 GPU 驱动与容器运行时支持
nvidia-smi
docker info | grep -i runtime

2. 安装(镜像导入与网络创建)

创建独立的 Docker Bridge 网络,导入离线镜像包:

Bash

复制代码
# 创建私有容器网络
docker network create --subnet=172.20.0.0/16 aip-network

# 导入离线镜像包(适用于港口无外网环境)
docker load -i aip-platform-v1.8.tar.gz
docker load -i aip-algo-vest-v2.4.tar.gz
docker load -i aip-zlm-v3.2.tar.gz

3. 配置(编写 Docker Compose 与业务参数)

/opt/aip 目录下创建 docker-compose.yml 文件:

YAML

复制代码
version: '3.8'

networks:
  aip-network:
    external: true

services:
  redis:
    image: redis:7.0-alpine
    container_name: aip-redis
    restart: always
    networks:
      - aip-network
    volumes:
      - /opt/aip/redis/data:/data

  zlm-media:
    image: harbor.internal/aip/zlm:v3.2
    container_name: aip-zlm
    restart: always
    ports:
      - "554:554"
      - "8080:8080"
    networks:
      - aip-network
    volumes:
      - /opt/aip/media/logs:/var/log/zlm

  algo-infer:
    image: harbor.internal/aip/algo-vest:v2.4
    container_name: aip-algo
    restart: always
    shm_size: '4gb'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu, video]
    environment:
      - CUDA_VISIBLE_DEVICES=0
      - CONCURRENT_TASKS=16
    networks:
      - aip-network
    volumes:
      - /opt/aip/models:/app/models
      - /opt/aip/data/snaps:/app/snaps

  platform:
    image: harbor.internal/aip/platform:v1.8
    container_name: aip-platform
    restart: always
    ports:
      - "8000:8000"
    environment:
      - REDIS_HOST=aip-redis
      - MEDIA_HOST=aip-zlm
      - ALGO_HOST=aip-algo
      - CALLBACK_AUTH_TOKEN=Bearer_port_token_2026
    networks:
      - aip-network
    volumes:
      - /opt/aip/platform/logs:/app/logs
      - /opt/aip/data/snaps:/app/snaps
    depends_on:
      - redis
      - zlm-media
      - algo-infer

4. 启动(容器集群拉起)

构建并后台拉起所有服务:

Bash

复制代码
cd /opt/aip
docker compose up -d

# 查看容器运行状态
docker compose ps

5. 验证(五维集成测试)

完成部署后,必须通过以下 5 个指标验证服务正常:

  1. Web UI :浏览器访问 http://<宿主机IP>:8000,登录界面正常加载。

  2. 视频预览 :添加岸桥 RTSP 流 rtsp://admin:pass@192.168.10.20:554/h264/ch1/main,显示画面秒开且无花屏。

  3. 算法告警:人员未穿反光衣进入堆场,页面在 2 秒内弹出高亮告警框与抓拍图。

  4. 日志健康 :查看日志无 CUDA OOMConnection RefusedDecode Error

  5. 回调验证:港口 TOC 系统正确接收到 webhook JSON 告警推送。

6. 上线(守护与自启)

设置 Docker 服务开机自启,并配置 Logrotate 防止日志爆满磁盘。

日志排查

遇到异常时,请按下面给出的排查路径快速定位根因:

排查步骤

  1. 查看平台控制日志:docker logs -f --tail 100 aip-platform

  2. 查看算法推理日志:docker logs -f --tail 100 aip-algo

  3. 查看流媒体拉流日志:tail -f /opt/aip/media/logs/zlm.log

常见报错与排查方案

1. 服务无法拉起或状态为 Exited
  • 现象docker compose ps 显示 aip-algo 状态为 Exited (1)

  • 原因:Docker 未配置 NVIDIA Runtime,或模型路径不存在。

  • 排查命令docker logs aip-algo,寻找 Nvidia driver not found 提示。

  • 解决方法 :安装 nvidia-container-toolkit 并重启 Docker 服务。

2. GPU 不可见或 NVDEC 解码异常
  • 现象 :日志提示 CUDA driver version is insufficientNVDEC decode error -22

  • 排查命令

    Bash

    复制代码
    docker exec -it aip-algo nvidia-smi
  • 解决方法:升级宿主机 NVIDIA 显卡驱动;检查摄像机编码,确认已关闭 H.265 B帧与 Smart264/265 编码。

3. RTSP 拉流失败 / 黑屏
  • 现象 :ZLM 日志报错 RTSP connection timeout (554)

  • 排查命令:进入容器内部测试网络连通性:

    Bash

    复制代码
    docker exec -it aip-zlm nc -zv 192.168.10.20 554
  • 解决方法:检查港口闸口交换机 VLAN 隔离策略,确保容器网段与 IPC 网段互通。

4. 告警不触发 / 丢帧
  • 现象 :人员穿未穿反光衣均无告警,日志打印 Frame dropped due to slow inference

  • 排查命令nvidia-smi 查看 GPU 内存占用是否达到 100%。

  • 解决方法 :降低单路视频流采样率(将 25fps 降至 15fps),或调大 docker shm_size: '4gb'

5. 延迟高(>10s)
  • 现象:现场人员已通过闸口,Web 页面很久后才出告警。

  • 原因:流媒体使用了 UDP 拉流导致严重重传包堆积,或算法使用了 CPU 解码。

  • 解决方法 :在平台通道设置中将协议改为 rtsp_tcp;确认硬解码开启。

6. CPU 占用率接近 100%
  • 现象top 命令显示 ffmpegpython 进程吃满 CPU。

  • 原因:软解码(CPU 解码)未成功切换为 NVDEC 硬件解码。

  • 解决方法 :检查镜像中 FFmpeg 是否编译了 nvdec 模块,在算法启动环境变量中强制添加 USE_NVDEC=1

性能优化

针对港口复杂环境下的 16 路以上高并发分析,建议实施以下优化措施:

  1. 共享内存调整 :Docker 默认 /dev/shm 仅为 64MB,高并发硬解码极易崩溃,务必在 docker-compose.yml 中配置 shm_size: '4gb'

  2. 抓图与码率控制:摄像机统一调整为 1080P@15fps,码率配置为 CBR 2048Kbps,关闭 Smart 编码。

  3. 日志自动轮转:避免抓拍图片与容器日志塞满 SSD 磁盘,配置 logrotate 规则:

    Plaintext

    复制代码
    /opt/aip/platform/logs/*.log {
        daily
        rotate 7
        missingok
        notifempty
        compress
        maxsize 100M
    }

回滚建议

如果在升级或部署过程中出现不可恢复的故障,请按以下步骤执行回滚:

  1. 停止当前容器集群

    Bash

    复制代码
    cd /opt/aip && docker compose down
  2. 切回上一版本镜像标签 :修改 docker-compose.yml 中的镜像版本(例如将 v1.8 改回 v1.7)。

  3. 恢复配置与数据库文件

    Bash

    复制代码
    cp /opt/aip/backup/config.env.v1.7 /opt/aip/config.env
  4. 重新拉起服务docker compose up -d 并验证 API 存活状态。

发布标签

Docker AI视频分析 私有化部署 港口安防 TensorRT 反光衣识别

延伸阅读/平台能力补充

在港口码头等大型高危作业区,私有化部署往往需要面对复杂的异构网络与庞大的摄像机接入量。如果您需要进一步评估软硬件配置或扩展更多安全算法:

  • 可以了解支持海量并发与低延迟处理的视频分析能力,掌握如何快速接入港口多厂牌 NVR 与 IPC。

  • 针对港口危险品区及闸口等高安全等级场景,查看标准的部署方案,实现全量数据本地化闭环管理。

  • 探索涵盖反光衣穿戴、安全帽佩戴、区域闯入及烟火检测的算法清单,按需开箱即用。

技术评估与支持:我们提供私有化部署全套架构设计与现场交付支持。如果您正在规划港口码头安防智能化改造,欢迎联系技术团队预约演示环境并评估接入条件。

相关推荐
刚子编程5 小时前
Ubuntu 22.04 Docker 从零部署全栈项目实录:Next.js + FastAPI + PostgreSQL 一次跑通
fastapi·nextjs·docker部署·全栈开发·ubuntu22.04
ai产品老杨21 小时前
GPU视频分析问题清单:环境、参数、验证和排错
常见问题·gpu部署·gpu视频分析
CSharp精选营1 天前
Ubuntu 22.04 Docker 从零部署全栈项目实录:Next.js + FastAPI + PostgreSQL 一次跑通
fastapi·nextjs·docker部署·全栈开发·ubuntu22.04
AI服务老曹2 天前
国产NPU视觉算法问题清单:环境、参数、验证和排错
常见问题·国产npu视觉算法·国产npu适配
AI服务老曹4 天前
多路摄像头AI分析问题清单:环境、参数、验证和排错
常见问题·多路摄像头ai分析·多路并发估算
ai产品老杨4 天前
视频流接入失败问题清单:环境、参数、验证和排错
常见问题·视频流接入失败·拉流失败
Highcharts.js4 天前
常见报错排雷指南4:坐标轴重叠、导出失败、兼容性问题的FAQ
开发工具·常见问题·highcharts·可视化图表·faq
七夜zippoe12 天前
DolphinDB 故障排查实战:系统、数据库与集群常见问题诊断
数据库·wpf·集群·常见问题·故障排查·dolphindb
hhzz19 天前
边缘AI视频分析引擎实战:可视化拖拽编排流水线把模型快速跑起来
人工智能·计算机视觉·边缘计算·智能安防·ai视频分析·流水线编排