You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过RTSP流传输/录制Docker容器GUI活动并实现容器自动销毁?

实现方案

你的需求完全可以实现,以下是具体操作步骤和核心逻辑:

一、核心思路

每个容器内通过虚拟显示服务(xvfb)提供GUI环境,用ffmpeg抓取屏幕输出并保存到共享卷;通过自定义启动脚本控制流程:先启动录屏和Puppeteer任务,待任务完成后终止录屏、确保文件写入完成,最后让容器退出,利用--rm参数自动销毁容器。

二、基础准备

1. 创建共享卷

用于统一存储所有容器的录屏文件:

docker volume create screen-recordings

2. 构建带依赖的镜像

编写Dockerfile,包含GUI、录屏和Puppeteer所需依赖:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y \
    ffmpeg \
    xvfb \
    chromium-browser \
    nodejs \
    npm \
    && rm -rf /var/lib/apt/lists/*

# 安装适配容器内Chromium版本的Puppeteer-Core
RUN npm install puppeteer-core@21.5.2

# 创建挂载目录并设置权限
RUN mkdir /recordings /app && chmod 777 /recordings

COPY start.sh /start.sh
RUN chmod +x /start.sh

CMD ["/start.sh"]

三、容器启动脚本(关键逻辑)

创建start.sh,控制录屏、任务执行和容器销毁的流程:

#!/bin/bash

# 启动虚拟显示服务
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99

# 启动后台录屏,保存到共享卷
ffmpeg -f x11grab -r 25 -s 1920x1080 -i :99 \
  -c:v libx264 -preset ultrafast \
  /recordings/container-$(hostname)-$(date +%Y%m%d%H%M%S).mp4 &
FFMPEG_PID=$!

# 执行Puppeteer任务(替换为你的实际脚本路径)
node /app/puppeteer-task.js

# 任务完成后终止录屏,等待文件写入完成
kill $FFMPEG_PID
wait $FFMPEG_PID

# 容器退出,触发--rm自动销毁
exit 0

四、启动容器

运行容器时挂载共享卷和任务脚本目录,启用--rm参数:

docker run --rm \
  -v screen-recordings:/recordings \
  -v $(pwd)/your-puppeteer-scripts:/app \
  your-custom-image-name

如果要启动多个容器,直接重复执行命令即可,共享卷会自动处理文件存储,无需担心端口冲突。

五、Puppeteer脚本配置

确保脚本使用容器内的Chromium,开启GUI模式:

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/usr/bin/chromium-browser',
    headless: false, // 必须关闭无头模式才能录屏GUI
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });

  // 你的Puppeteer任务逻辑...

  await browser.close();
})();

六、关于RTSP直播的补充

如果需要直播容器活动,可通过端口映射避免冲突:每个容器将内部RTSP端口(比如8554)映射到宿主机的不同端口(8554、8555、8556)。但录制到共享卷的方案更简洁,无需额外管理直播服务,更适配你“任务完成后销毁容器”的需求。

内容的提问来源于stack exchange,提问作者Itzik.B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:12:50