Docker部署的bilibili录播姬踩坑

本文最后更新于:2024年8月11日 晚上

录播姬

配置

拉取镜像

1
docker pull bililive/recorder:latest

映射目录

  • /app/logs:日志文件
  • /rec:配置文件路径和录像文件路径

因为配置文件和录像文件共用一个目录,为了区分,需要在里面设置的录像保存格式里进行操作:

1
2
# 录像保存文件格式
/media/{{areaParent}}/{{name}}-{{ roomId }}/{{ "now" | time_zone: "Asia/Shanghai" | format_date: "yyyyMMdd" }}/Rec[{{ qn | format_qn }}]-ID[{{ roomId }}]-Time[{{ "now" | time_zone: "Asia/Shanghai" | format_date: "yyyyMMdd HH:mm:ss fff" }}]-{{ title }}-P{{partIndex}}.flv

这个是我自己的格式,解释一下主干部分,剩下的自己参照官方文档:

  • /media:指保存到/rec/media文件,到时候可以映射到单独目录-v /media:/rec/media
  • {{areaParent}}:主分区名称,如虚拟主播
  • {{areaChild}}:子分区名称,如电台下的唱见电台
  • {{roomID}}:主播直播间号
  • {{ qn | format_qn }}:表示画质,默认是[原画]
  • {{partIndex}}:分片标签
  • format_date: "yyyyMMdd HH:mm:ss fff":这个格式表示日期类似于20230714 12:23:46 233
  • {{ "now" | time_zone: "Asia/Shanghai" | format_date: "yyyyMMdd" }}:这个是日期,但你只需要关心后面的日期格式即可:yyyyMMdd表示日期类似于格式20230714

然后拉起容器即可:

1
docker run --name recoder -p 2356:2356 -d -v /recoder/conf:/rec -v /recoder/logs:/app/logs bililive/recorder:latest

不过你很快就会发现权限问题,比如你在访问/recoder/logs里的日志时只有阅读权限,没有修改权限。而配置文件你也没有权限修改。

文件权限问题

注意:因为设置了权限,所以你需要手动创建你要挂载进去的文件夹,这里指你需要手动创建/recoder/conf文件夹和recoder/logs文件夹,否则容器会拉起时默认使用root权限创建!

如果你不是root,那么你需要调整容器内的权限,否则映射出来的文件权限默认是root (750)

我们只需要修改运行指令即可:

1
docker run --name recoder -p 2356:2356 -d -v /recoder/conf:/rec -v /recoder/logs:/app/logs  -u 1000:1000 -e PUID=1000 -e PGID=1000 -e UMASK=022 bililive/recorder:latest
  • -u:让容器内以用户ID身份运行,可以使用id来查看你自己的用户ID
  • -e PUID XXX -e PGID:有的容器会读取这个环境变量来配置自己的权限ID,跟-u是两个东西,录播姬似乎不会使用
  • -e UMASK:权限反码,指明容器创建文件时使用的权限数字,也是环境变量,有的容器会读取,录播姬似乎不会使用,其中022755是相同的(就跟子网掩码和反子网掩码一样)

这样你就会发现在容器内查看文件权限时是1000 1000,且用户名为I have no name!

不过这样你很快就会遇到文件挂载问题。

这个问题只会产生在希望挂载一个外置大容量文件夹进入容器,且希望视频保存在这个文件夹内时才需要注意,如果你想直接使用docker cp的方式将文件拷贝出来也可以。

文件挂载问题

容器如何将视频保存在挂载进去的大容量目录

参考我提的Issue,这里摘录部分。

目录权限检查

如果你操作的是root用户,大概不会遇到这些问题,如果你像我一样(或者说跟ubuntu)一样新建一个有sudo权限的用户账户,那么可能会出现这些问题。

你需要确保你挂载的文件目录的所属用户是这个账户

  • 这里假设为ubuntu
  • 假设挂载进去的大容量目录为/media

那么你需要:

1
2
3
4
cd /
ls -l
# 查看media的权限是不是,用户名一定得是Ubuntu
> ubuntu ubuntu ... media

确认文件权限且结合你之前拉起容器时会使用-u 1000:1000,就可以进行下一步:

将目录映射进去-v /media:/media

然后进行全局的配置,文件命名文首已经给出,然后看看配置文件能否创建。创建成功后先去创建软连接:

1
2
3
docker exec -it recoder bash
# 容器内
>> ln -s /media /rec/media

这样就创建了从挂载文件到工作区的软连接。这个时候再尝试开启直播录制,就能将视频文件存放到挂载目录,在宿主机也能看见了!


Docker部署的bilibili录播姬踩坑
https://qlozin.top/2023/07/13/Docker 录播姬部署/
作者
QLozin
发布于
2023年7月14日
更新于
2024年8月11日
许可协议