启用录屏时Selenoid浏览器会话Pending超时问题求助
嘿,我来帮你搞定这个Selenoid启用视频录制后会话pending超时的问题!结合你给的配置和日志信息,咱们一步步排查:
问题梳理
启用视频录制后,所有浏览器会话卡在pending状态,最终触发超时,相关信息如下:
- 状态接口返回:
/status { "total": 11, "used": 0, "queued": 0, "pending": 2, "browsers": { "chrome": { "65.0": {} } } } - 当前
browsers.json配置:{ "chrome": { "default": "65.0", "versions": { "65.0": { "image": "selenoid/vnc:chrome_65.0", "port": "4444", "path": "/" } } } }
核心排查方向与解决方案
1. 先补全视频录制的配置项
你当前的browsers.json里没有开启视频录制的开关,这是基础配置缺失!需要在对应浏览器版本中添加"video": true,修改后的配置如下:
{ "chrome": { "default": "65.0", "versions": { "65.0": { "image": "selenoid/vnc:chrome_65.0", "port": "4444", "path": "/", "video": true } } } }
修改完成后,记得重启Selenoid容器:
docker restart selenoid
2. 检查视频目录的挂载与权限
Selenoid录制视频需要将宿主机的目录挂载到容器内部的/opt/selenoid/video路径,而且这个目录必须让容器内的用户(通常是UID 1000)拥有读写权限,否则会因为无法写入视频文件导致浏览器启动失败,会话一直pending。
- 如果启动容器时没挂载视频目录,添加挂载参数重新启动:
docker run -d --name selenoid \ -p 4444:4444 \ -v /你本地的视频存储目录:/opt/selenoid/video \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(pwd)/config/:/etc/selenoid/ \ aerokube/selenoid:latest - 修复宿主机视频目录的权限:
chown -R 1000:1000 /你本地的视频存储目录 chmod -R 755 /你本地的视频存储目录
3. 从日志定位具体错误
从你提供的容器日志里,重点关注这类关键词:permission denied(权限拒绝)、cannot write to video directory(无法写入视频目录)、no such file or directory(目录不存在)。比如日志中如果出现:
time="XXXX-XX-XXTXX:XX:XXZ" level=error msg="create video file: open /opt/selenoid/video/xxx.mp4: permission denied"
那直接对应修复视频目录的权限即可。
4. 验证修复效果
重启容器后,发送一个测试请求启动浏览器会话,同时检查视频目录是否生成.mp4文件:
curl -X POST http://localhost:4444/wd/hub/session -d '{"desiredCapabilities":{"browserName":"chrome","version":"65.0"}}'
如果会话成功创建,且视频目录出现对应的视频文件,就说明问题解决啦!
内容的提问来源于stack exchange,提问作者Xotabu4

