# DDTV_Docker版使用教程(Linux)

Docker 镜像在 Docker Hub (opens new window)GitHub Container registry (opens new window) 上提供。

两个位置提供的镜像完全一样,都是对 DDTV 发行版本的简单包装。

# 先决条件

# 可用镜像

Docker 项目名 特点
DDTV_CLI 重启容器即可更新 DDTV
DDTV_WEB_Server 重启容器即可更新 DDTV
DDTV_Deps 只含 DDTV 必须依赖

在容器中更新 DDTV

重启容器即可,配置AutoInsallUpdate目前仅供DDTV_GUI使用。

# 镜像名

Docker 项目名 GHCR 镜像名 Docker Hub 镜像名
DDTV_CLI ghcr.io/chkzl/ddtv/cli ddtv/cli
DDTV_WEB_Server ghcr.io/chkzl/ddtv/webserver ddtv/webserver
DDTV_Deps ghcr.io/chkzl/ddtv/deps ddtv/deps

# CLI / WEB_Server 支持的架构及可用标签

系统 \ 架构 amd64 arm64v8 arm32v7 可用标签
alpine 1 1 alpine 3.0-alpine 3.0.*.*-alpine
debian latest debian 3.0 3.0.*.*

Tip 1

受 DDTV 依赖影响,目前 alpine arm 下 DDTV 的日志功能二维码功能无法使用,并因此存在内存泄露问题(日志及内存泄露问题应该解决了,等个有缘人测试.jpg),不建议使用。

# 最佳实践

查阅修改docker-ddtv.env后运行

# 方法一:修改docker-compose.yml后自行运行

wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-ddtv.env
nano docker-ddtv.env

wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-compose.yml
nano docker-compose.yml
> version: '3'
> services:
>   DDTV.service_name:
>     env_file:
>       - docker-ddtv.env
> ...
# env_file 优先级低于 environment 指定的环境变量

# 方法二:使用参数--env-file运行

  • docker cli
wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-ddtv.env
vi docker-ddtv.env
sudo docker run --env-file=./docker-ddtv.env ...

# docker cli 运行容器

# 运行 DDTV_WEB_Server

sudo docker volume create DDTV_Rec
sudo docker run -d -p 11419:11419 \ # \后面不能有字符
        -v DDTV_Rec:/DDTV/Rec     \ # 必须,挂载卷或文件夹;否则会挂载匿名卷
        -v ${CONFIG_DIR}:/DDTV    \ # 可选,持久化 DDTV_WEB_Server 与 配置文件
        -e PUID=$(id -u)          \
        -e PGID=$(id -g)          \
        --name DDTV_WEB_Server    \
        ghcr.io/chkzl/ddtv/webserver
# 删除容器
sudo docker rm -f DDTV_WEB_Server
# 删除录制文件
sudo docker volume rm DDTV_Rec

# 运行 DDTV_CLI

sudo docker volume create DDTV_Rec
sudo docker run -d -p 11419:11419 \ # \后面不能有字符
        -v DDTV_Rec:/DDTV/Rec     \ # 必须,挂载卷或文件夹;否则会挂载匿名卷
        -v ${CONFIG_DIR}:/DDTV    \ # 可选,持久化 DDTV_CLI 与 配置文件
        -e PUID=$(id -u)          \
        -e PGID=$(id -g)          \
        --name DDTV_CLI           \
        ghcr.io/chkzl/ddtv/cli
# 删除容器
sudo docker rm -f DDTV_CLI
# 删除录制文件
sudo docker volume rm DDTV_Rec

# 单独挂载配置文件

# CLI / WEB_Server

-v ${PWD}/DDTV:/DDTV    \ # 可选,持久化 DDTV_CLI 与 配置文件

# 替换成

-v ${PWD}/DDTV/RoomListConfig.json:/DDTV/RoomListConfig.json \
-v ${PWD}/DDTV/DDTV_Config.ini:/DDTV/DDTV_Config.ini         \
-v ${PWD}/DDTV/BiliUser.ini:/DDTV/BiliUser.ini               \

TIP

若单独挂载RoomListConfig.json,环境变量RoomList、变量BiliUser 和 CLI / WEB_Server 配置文件变量将不可用。2

# 可用环境变量

# Docker 版独有环境变量

参数名 格式 默认值 说明 可用镜像
TZ 州/城市 Asia/Shanghai 时区 cli webserver
PUID num 0 运行 DDTV 的用户 ID cli webserver
PGID num 0 运行 DDTV 的用户组 ID cli webserver
RoomList 2 json {"data":[]} 来自同名配置文件 cli webserver
BiliUser 2 ini 来自同名配置文件 cli webserver

RoomList \ BiliUser 的食用方法

务必使用单引号括起变量;使用\n转义换行符,例如:

-e RoomList='{"data":[{"name":"蒂蒂媞薇_Official", "Description":"", "RoomId":21446992, "UID":408490081, "IsAutoRec":false, "IsRemind":false, "IsRecDanmu":false, "Like":false, "Shell":""}]}' \
-e BiliUser='cookie=...\nExTime=...\ncsrf=...\nuid=...' \

# CLI / WEB_Server 配置文件常用环境变量 2

参数名与DDTV Core通用配置文件的配置名完全相同。

参数名 格式 默认值 说明
RoomListConfig 路径 ./RoomListConfig.json RoomListConfig.json文件位置
IsHls bool True 是否优先使用HLS进行录制
IsDev bool False 是否使用开发版更新模式
IsAutoTranscod bool False 是否启用自动转码
IsFlvSplit bool False 是否启用全局FLV文件按大小切分开关,注:启动后自动合并、自动转码失效
FlvSplitSize longint 1073741824 文件切分的大小(byte)
WebUserName string ami WEB登陆使用的用户名
WebPassword string ddtv WEB登陆使用的密码
Shell bool False 用于控制下载完成后是否执行对应房间的Shell命令
WebHookUrl string string.Empty WebHook的目标地址

使用dev开发版

法1:初次启动容器,可设置环境变量IsDev=True后启动容器 2,在登陆阿B(即配置文件写入)后关闭容器
法2:停止容器,修改配置文件DDTV_Config.ini的配置IsDev=True
之后启动容器获取dev更新

Tip 2

变量只在初次启动,即配置或配置文件不存在时可用。

更多可用变量见 官网配置说明docker-ddtv.env (opens new window)

# CLI / WEB_Server 可用运行参数

sudo docker run  \
     ...         \
     镜像[:标签] \
     --no-update \ # 容器重启后不自动更新 DDTV
     --verbose   \ # 脚本输出更多信息(若服务器多人使用docker,请谨慎使用该参数,因为会将DDTV中的个人信息\配置输出到docker日志中)