新闻详情

新闻详情

首页 / 资讯中心 / 详情

内网视频项目必看:ZLMediaKit Docker离线部署全攻略

发布时间:2026/9/8 11:15:13来源:尧图网络
内网视频项目必看:ZLMediaKit Docker离线部署全攻略
简介面向需要在离线或内网环境快速部署 ZLMediaKitZLM的运维与开发人员该资源提供了一套完整的 Docker 离线安装方案无需配置外部镜像源或联网拉取依赖特别适合政企机房、生产内网等受限网络场景。压缩包共包含2个文件tar 文件为可直接导入的 Docker 镜像sh 脚本则封装了镜像加载、容器参数设置等关键操作整体约 208.73MB体量相对精简。资源目前已有 373 人学习下载覆盖流媒体网关、视频监控、WebRTC 接入等典型私有化部署需求。通过这套资源使用者可以快速获得可运行的 ZLM 容器环境同时理解离线安装时的镜像导入与启动流程减少手动构建镜像、依赖缺失等常见问题便于在多个内网节点批量复制部署。脚本中也保留了常用的端口、挂载目录等参数入口方便按实际业务需求快速定制容器配置。1. 为什么内网视频项目总是绕不开ZLM1.1 ZLM到底负责干什么如果你做过安防项目或者直播转码场景应该听过 ZLMediaKit项目缩写就是 ZLM。它是一套基于 C 实现的开源流媒体服务器核心能力是把各种来源的视频流收进来再按不同协议分发出去。最常见的用法是海康或大华的摄像头通过 GB28181 国标协议注册到 ZLM平台侧再通过 HTTP-FLV 或 HLS 从 ZLM 取流这样网页、小程序和 App 都能直接播放。它也可以作为 RTSP、RTMP 拉流代理相当于一个内网视频“中转站”。很多集成商选择它是因为它开源免费协议支持面广把 RTMP、RTSP、HTTP-FLV、HLS、GB28181 这些协议统一封装在一个程序里省去了同时部署多套服务的麻烦。对于项目报价来说软件本身的成本是零项目的实际开销主要在服务器硬件、带宽和定制开发上。如果你在网上搜“zlm流媒体服务器价位”会发现有人把它当成商业产品报价来问其实它本身不收许可证费用价格问题更多是部署环境的成本问题。1.2 离线部署的真实困境我刚接手的一个项目就是标准的内网环境视频监控平台部署在机房内网服务器上服务器本身被安全策略限制不能访问公网。摄像头倒是不缺网络也都是通的但服务器上连 Docker 都还没装更别说从 Docker Hub 拉镜像了。这种情况下通常的两条路是要么找一台可以临时访问外网的机器把镜像做成离线包带进内网要么在内网搭一个私有镜像仓库通过手动同步的方式导入。ZLM 这种流媒体服务在两个场景下特别要求周密的部署准备一是项目上线时间紧现场网络条件无法等待在线安装二是后续维护可能需要更新镜像但没有外网就会很麻烦。这篇就把我在实际项目里做的离线部署过程完整写下来包括镜像导出、Docker 离线安装、容器配置、以及排错思路照做基本能把一台全新的内网服务器变成一个能跑 ZLM 流媒体服务的节点。2. 在联网机器上先备好镜像我建议的方案2.1 两条离线部署思路怎么选离线部署的思路大致分两类方案A用docker save把ZLM镜像导出成tar包拷贝到内网后docker load然后直接docker run。优点是步骤少适合单机或少量节点。方案B搭建内网镜像仓库例如 Harbor 或简单 registry在联网机器上推送镜像到仓库再在内网机器上从仓库docker pull。优点是后期更新镜像、多台服务器安装更方便但前期复杂度高。项目如果只有一两台服务器我真的建议方案A简单直接。如果后期会不断加服务器、要统一管理镜像版本早点把方案B做起来。前一种方式的核心命令就是这么几条在内网环境基本不会出大问题。2.2 拉取ZLM镜像时该怎么选tag在联网机器上拉取 ZLM 镜像的命令就是docker pull zlmediakit/zlmediakit:mastertag 方面最常看到的是master这个滚动标签对应最新代码。如果需要稳定一点的版本可以去 Docker Hub 看它打出的其他 tag比如带版本号的。实际部署时我不建议直接锁死 master因为滚动标签每次拉取可能内容不同生产环境最好固定到某个具体的版本标签便于后续回溯。如果你所在网络访问 Docker Hub 特别慢换镜像加速源是一个常见做法配置好/etc/docker/daemon.json里的registry-mirrors后重启 Docker 再拉。这一步要在有网的机器上完成和内网环境没有关系。2.3 导出归档与体积控制镜像拉下来之后确认一下docker images | grep zlmediakit看到 REPOSITORY 和 TAG 都正常后导出docker save -o zlm.tar zlmediakit/zlmediakit:master这里有个细节如果你在用docker save时只写镜像ID比如docker save -o zlm.tar 0e5574283393导入到内网后镜像名和tag会变成none很讨厌。所以导出时尽量用“仓库名:标签”的完整写法。导出的 tar 文件通常有几百MB因为 ZLM 镜像里包含了完整的编译产物和运行时依赖。如果不够放心可以先看看 tar 包的内容列表tar tf zlm.tar | head -20嫌文件太大的话可以在导出时就压缩docker save zlmediakit/zlmediakit:master | gzip zlm.tar.gz拷贝到内网后先解压再 load或者直接docker load -i zlm.tar.gzDocker 也能自动识别压缩格式。文件传输方式就看现场条件U盘、内网FTP、scp都行拷完记得做好文件大小校验镜像文件在传输过程中损坏的情况我也遇到过后面会讲怎么排查。3. 内网环境导入镜像与Docker底座的准备3.1 Docker 已装好直接 load 就完了内网服务器如果已经装好 Docker这一步没什么好说的docker load -i zlm.tarload 完成后docker images能看到zlmediakit/zlmediakit:master说明镜像层已经还原。load 过程是纯本地操作不依赖外网所以完全可以在内网执行。如果内网是多台服务器把这份 tar 发到每台机器重复 load 即可。3.2 连 Docker 都没有的 CentOS7 怎么办这是最容易卡住的地方。很多内网服务器是 CentOS 7而且初始环境非常干净连docker-ce都没装。离线装 Docker 的思路是先在能上网的同版本机器上下载好 rpm 包再到内网安装。在联网的 CentOS 7 机器上使用 yum 的下载模式把依赖也一起拉下来mkdir /tmp/docker_rpm yum install --downloadonly --downloaddir/tmp/docker_rpm \ docker-ce docker-ce-cli containerd.io如果机器上联不了 yum 源也可以手动下载 rpm 包但依赖关系会很麻烦。把整个目录拷到内网后执行cd /tmp/docker_rpm rpm -Uvh *.rpmDebian/Ubuntu 系统则对应使用apt-get download或者apt-get install --download-only把需要的一堆 deb 包打包带走内网用dpkg -i安装。装完 Docker先启动服务再验证systemctl enable docker systemctl start docker docker version重要提示离线装 Docker 后不要急着挂镜像加速源内网本来就没有外网daemon.json 里只需要关注>{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }这样容器日志不会把磁盘打爆。4. 启动ZLM容器端口、目录、配置一次理顺4.1 端口映射到底该怎么开ZLM 默认监听的端口主要是这几个作用协议默认端口RTSP 拉流/推流TCP554RTMP 流TCP1935HTTP-FLV / HLSTCP80GB28181 SIP 注册UDP5060RTP 媒体接收UDP10000 起如果只是测试 HTTP-FLV 播放映射 80 和 1935 就可以。但内网安防项目往往要接 GB28181 摄像头SIP 和 RTP 端口就必须同时开放。用 bridge 网络启动时比较完整的命令是docker run -d --name zlm \ -p 1935:1935 \ -p 8080:80 \ -p 554:554 \ -p 5060:5060/udp \ -p 10000:10000/udp \ -v /opt/zlm/config:/opt/media/bin/config \ -v /opt/zlm/www:/opt/media/bin/www \ --restartalways \ zlmediakit/zlmediakit:master注意RTP 接收是一个端口范围默认配置里port_range可能是 20000意味着要接收 10000 到 30000 的 UDP 包。这在大规模摄像头接入时端口映射会非常麻烦。我一般会改小这个范围或者直接用 host 网络模式。4.2 配置文件的挂载是新手重灾区这里有个很容易踩的坑ZLM 启动时如果找不到 config.ini会直接退出。多数容器镜像默认自带 config.ini所以直接 run 没问题但如果你挂载了一个空的 host 目录到/opt/media/bin/config容器启动会报错退出。我第一次离线部署时就栽在这里docker logs里看到类似 “can not open configure file” 的日志才发现空目录把默认配置覆盖了。正确的做法是先不挂载 config 目录启动一个临时容器把默认配置拷出来再停止容器把配置放到 host 目录里重新挂载启动docker cp zlm:/opt/media/bin/config/config.ini /opt/zlm/config/config.ini docker rm -f zlm docker run -d --name zlm ... -v /opt/zlm/config:/opt/media/bin/config ... zlmediakit/zlmediakit:master把 config.ini 拿出来之后最常改的几个点也就清楚了[rtsp] portRTSP 监听端口[rtmp] portRTMP 监听端口[http] portHTTP-FLV / HLS 的访问端口[rtp_proxy] port和port_rangeGB28181 收流的 UDP 起始端口和范围[sip] portSIP 注册端口改配置前建议先备份改完重启容器生效。ZLM 对个别配置项是支持热加载的但离线环境里图省事不如图稳直接重启容器最保险。4.3 host网络模式为什么更省心在实际项目中GB28181 接入几十路摄像头很常见用 bridge 模式要把 10000 开始的整段RTP端口映射出来防火墙规则也复杂。如果内网环境没有太多安全分区约束我建议直接用 host 网络docker run -d --name zlm \ --network host \ -v /opt/zlm/config:/opt/media/bin/config \ -v /opt/zlm/www:/opt/media/bin/www \ zlmediakit/zlmediakit:master用 host 网络后容器直接使用宿主机网络栈端口全通也不需要-p映射。代价是宿主机端口会被 ZLM 占用端口冲突时需要手动改 config.ini。在 Linux 服务器上这个方案最省心适用于大部分内网视频项目。5. 把推流和拉流跑通验证部署是否成功5.1 先用ffmpeg推一路流镜像导入、容器启动后第一步验证推流。在任意一台和 ZLM 内网可达的机器上用 ffmpeg 推一路本地视频ffmpeg -re -i test.mp4 -c:v libx264 -c:a aac -f flv rtmp://服务器IP:1935/live/test如果测试机器上没有现成的视频文件可以生成一个测试画面ffmpeg -re -f lavfi -i testsrcsize1280x720:rate25 \ -f lavfi -i sinefrequency1000:sample_rate44100 \ -vcodec libx264 -acodec aac \ -f flv rtmp://服务器IP:1935/live/test推流命令不报错并持续输出画面数据说明 RTMP 端口工作正常。这一步如果失败优先检查 ZLM 所在服务器的 1935 端口防火墙和容器映射。5.2 用HTTP-FLV和HLS验证出流推流的同时在浏览器或 VLC 里验证三种取流协议RTMPrtmp://服务器IP:1935/live/testHTTP-FLVhttp://服务器IP:8080/live/test.flvHLShttp://服务器IP:8080/live/test/hls.m3u8浏览器里直接访问 HTTP-FLV 地址能看到视频画面HLS 的 m3u8 能正常下载并播流。如果容器端口映射的是8080:80访问时就用 8080这个容易搞混。ZLM 自带 Web 页面浏览器打开http://服务器IP:8080能看到服务首页也可以用来快速判断容器是否正常。这里提醒一点HLS 有切片延迟推流后通常要等几秒到十几秒才能在播放器里看到画面不像 HTTP-FLV 几乎是秒开。验证时别急着下结论多等一会再刷新。5.3 GB28181摄像头接入时的额外验证点摄像头通过国标接入时需要再验证两个东西摄像头SIP服务器地址填 ZLM 所在机器的IP端口默认 5060。平台侧发起直播请求后ZLM 要能收到 RTP 包并输出一路新流。如果发现摄像头能注册但拉流失败多半是 RTP 接收端口没通。验证端口连通性可以用nc或看 Docker 容器日志ZLM 日志里会打印收到 INVITE 请求和开始接收 RTP 的信息。生产环境建议先把单路摄像头调通再批量接入避免一开始就面对几十路设备的复杂排查。6. 离线部署中我踩过的坑和排查链6.1 容器秒退先从日志查起容器启动后马上退出第一时间看日志docker logs zlm docker inspect zlm常见原因有三个配置文件缺失、挂载目录权限不对、宿主机端口被占用。日志里如果提到 config.ini基本就是配置文件问题把默认配置拷回来即可。Mount 权限问题发生在 SELinux 开启的 CentOS 上目录权限不够可以加:z或者临时关闭 SELinux 验证。6.2 拉流黑屏但日志显示服务正常推流已经成功HTTP-FLV 打开黑屏。这种情况先排除浏览器的问题很多浏览器不再直接支持 HLS 或需要 flv.js。用 VLC 测试同一路流如果正常就是播放端兼容性问题。另一个常见原因是走 bridge 网络时只映射了 80 和 1935视频数据流能从 RTP 端口进来但容器没有对外暴露对应端口导致拉流会话异常用 host 网络能避开这类问题。6.3 镜像导入后 tag 变成 noneload 之后docker images看到REPOSITORY none这基本就是在 save 时用了镜像ID而不是仓库名加标签。处理办法是重新打 tagdocker tag 镜像ID zlmediakit/zlmediakit:master也可以在联网机器上重新 save 一次导出时写成docker save -o zlm.tar zlmediakit/zlmediakit:master重点是把完整名称带上。6.4 内网防火墙导致的半通半不通内网不是完全没防火墙而是经常遇到过“Ping通但端口不通”的情况。容器里服务正常运行宿主机本机访问也正常但其他机器无法拉流首先检查宿主机防火墙firewall-cmd --list-portsCentOS 上如果跑了 firewalld需要放行 1935、8080、554、5060/udp 和 RTP 端口段firewall-cmd --permanent --add-port1935/tcp firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload离线部署比在线部署更依赖清晰的排查顺序先确认镜像在再确认容器在最后确认端口通。镜像能 load 不代表配置文件正确配置文件正确不代表网络通了。按这个顺序排查大部分问题都能在十分钟内定位。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RK3568边缘AI部署实战:RKNN模型转换与工具链安装指南 2026/9/8 12:45:29

RK3568边缘AI部署实战:RKNN模型转换与工具链安装指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从人脸识别到AI Agent:门禁项目实战中的技术链路与工程化思考 2026/9/8 12:45:29

从人脸识别到AI Agent:门禁项目实战中的技术链路与工程化思考

上个月接了个教室门禁改造的活,甲方点名要上人脸识别门禁机,还得跟现有的考勤系统打通。项目看着不大,但一路从硬件选型、Java对接、边缘设备调试到接口压测走下来,反倒让我把“人脸识别”这四个字看得更通透了。它不是一个单点算…

阅读更多 →
10款AI论文工具实测:从文献检索到图表生成的毕业季效率手册 2026/9/8 12:45:29

10款AI论文工具实测:从文献检索到图表生成的毕业季效率手册

又是一年毕业季。实验室的灯比平时关得更晚,朋友圈从“今天吃什么”变成了“文献还有23篇没读”,连平时最淡定的人也开始研究起降重软件。作为常年和论文、代码打交道的技术人,我今年把真正用得上的 AI 论文工具从头到尾捋了一遍,…

阅读更多 →
麒麟v10系统rm误删文件恢复实操指南:ext4数据救援全流程 2026/9/8 12:45:29

麒麟v10系统rm误删文件恢复实操指南:ext4数据救援全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
FFmpeg镜像学舞实战:从零搭建舞蹈视频对比处理环境 2026/9/8 12:45:29

FFmpeg镜像学舞实战:从零搭建舞蹈视频对比处理环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
编程学习社区年入18万美元:独立开发者的变现路径拆解 2026/9/8 12:42:29

编程学习社区年入18万美元:独立开发者的变现路径拆解

很多做独立开发的朋友,其实都卡在一个点上:产品做出来了,流量也有了,但就是不知道怎么把用户变成收入。看了太多“月入十万”的爽文,回头看看自己后台那点可怜的付费转化率,很容易怀疑人生。这期周刊里提到…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞