[请使用新版镜像] mdcx-builtin-gui-base, mdcx-builtin-webtop-base
10K+
请使用 stainless403/gui-base_mdcx-builtin 或 stainless403/webtop-base_mdcx-builtin
# 获取当前用户的
id
# 获取指定用户的
id admin
# 获取USER_ID
id -u admin
# 获取GROUP_ID
id -g admin
容器内置了一个用户,名为app,其用户ID和分组ID对应了部署容器时指定的USER_ID和GROUP_ID这两个环境变量。
默认都为0,即root用户。
app是运行MDCx的用户,也就是MDCx产生的文件,比如nfo、海报等,默认都是归属于app这个用户的。
进一步说,如果app用户不具备某些文件的权限,则MDCx可能会运行异常。
比如,如下场景:
./config:/mdcx_config,且在MDCx设置了配置目录为/mdcx_config./config目录归属于root且权限不是777,比如是755USER_ID和GROUP_ID这个情况下,MDCx由于没有/mdcx_config目录的写入权限,在保存配置文件时,会报错,导致容器退出:
关键日志:PermissionError: [Errno 13] Permission denied
mdcx | [app ] Traceback (most recent call last):
mdcx | [app ] File "/app/MDCx_Main.py", line 3971, in pushButton_save_new_config_clicked
mdcx | [app ] self.pushButton_save_config_clicked()
mdcx | [app ] File "/app/MDCx_Main.py", line 3958, in pushButton_save_config_clicked
mdcx | [app ] self.save_config_clicked()
mdcx | [app ] File "/app/MDCx_Main.py", line 4939, in save_config_clicked
mdcx | [app ] cf.save_config(json_config)
mdcx | [app ] File "/app/Function/config.py", line 557, in save_config
mdcx | [app ] with open(config_path, "wt", encoding='UTF-8') as code:
mdcx | [app ] PermissionError: [Errno 13] Permission denied: '/mdcx_config/config3.ini'
mdcx | [app ] Fatal Python error: Aborted
mdcx | [app ] Current thread 0x00007fd625215740 (most recent call first):
mdcx | [app ] File "/app/MDCx_Main.py", line 13568 in <module>
mdcx | [app ] Aborted (core dumped)
mdcx | [supervisor ] service 'app' exited (with status 134).
mdcx | [supervisor ] service 'app' exited, shutting down...
stainless403/mdcx镜像已内置MDCx。如果想使用本地MDCx源码版的,请使用stainless403/mdcx-base镜像。
建议使用 示例项目 结构,解压到合适的位置后,进入项目目录,之后的操作,如无特殊说明,都是在该目录(假设名为mdcx-docker)内进行。
整个docker项目的结构大致如下:
mdcx-docker
|-- config
|-- config.ini
|-- config-vip.ini
|-- config-test.ini
|-- logs
|-- 2023-02-04-01-15-00.txt
|-- .env
|-- .env.sample
|-- .env.versions
|-- docker-compose.mdcx-base.sample.yml
|-- docker-compose.mdcx.sample.yml
|-- docker-compose.yml
|-- update-app.sh
复制一份docker-compose.mdcx.sample.yml,手动或使用如下命令:
cp docker-compose.mdcx.sample.yml docker-compose.yml
修改docker-compose.yml,在volumes下添加映射。
比如影片存放在
/volume2,可以简单地添加这样的映射:/volume2:/volume2,这样在MDCx内访问也是一样的路径。
复制一份.env.sample,手动或使用如下命令:
cp .env.sample .env
修改.env,按需求修改相关参数
TZ=Asia/Shanghai
# 应用窗口宽度
DISPLAY_WIDTH=1200
# 应用窗口高度
DISPLAY_HEIGHT=750
# 访问密码,如不需要,留空。如果有在公网远程访问的需求,建议设置
VNC_PASSWORD=
# 网页访问端口
WEB_LISTENING_PORT=5800
# VNC监听端口
VNC_LISTENING_PORT=5900
# 运行应用的用户ID
USER_ID=0
# 运行应用的用户组ID
GROUP_ID=0
# python软件包加速镜像
# 豆瓣
PYPI_MIRROR=https://pypi.doubanio.com/simple
# 清华
# PYPI_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple
# 默认
# PYPI_MIRROR=https://pypi.org/simple
# 容器名称
CONTAINER_NAME=mdcx
version: '3'
services:
mdcx:
image: stainless403/mdcx:latest
container_name: ${CONTAINER_NAME}
volumes:
# 配置目录
- ./config:/mdcx_config
# 日志目录
- ./logs:/app/Log
# 影片所在位置
- /volume2:/volume2
- /volume3:/volume3
environment:
- TZ=${TZ}
# 应用窗口宽度
- DISPLAY_WIDTH=${DISPLAY_WIDTH}
# 应用窗口高度
- DISPLAY_HEIGHT=${DISPLAY_HEIGHT}
# 访问密码
- VNC_PASSWORD=${VNC_PASSWORD}
# 运行应用的用户ID
- USER_ID=${USER_ID}
# 运行应用的用户分组ID
- GROUP_ID=${GROUP_ID}
# python软件包镜像地址
- PYPI_MIRROR=${PYPI_MIRROR}
ports:
- ${WEB_LISTENING_PORT}:5800
- ${VNC_LISTENING_PORT}:5900
restart: unless-stopped
network_mode: bridge
stdin_open: true
docker-compose up -d
假设服务器IP为192.168.1.100,使用默认端口5800。
则访问地址为:http://192.168.1.100:5800
/path/to/ 替换为你实际的路径。
docker run --name mdcx \
--restart unless-stopped \
-p 5800:5800 \
-p 5900:5900 \
# 配置目录
-v /path/to/mdcx-docker/config:/mdcx_config \
# 日志目录
-v /path/to/mdcx-docker/logs:/app/Log \
# 影片目录
-v /volume2:/volume2 \
-e TZ=Asia/Shanghai \
-e DISPLAY_WIDTH=1200 \
-e DISPLAY_HEIGHT=750 \
-e VNC_PASSWORD=123456 \
# 运行应用的用户ID和分组ID,替换为你实际的ID
-e USER_ID=0 \
-e GROUP_ID=0 \
stainless403/mdcx
如果使用的是没有内置MDCx应用的stainless403/mdcx-base镜像,需要先自行下载新版应用并将应用文件解压到app目录。
stainless403/mdcx则可以省略这一步。
这里提供了一个一键更新脚本 update-app.sh 自动为你完成更新处理。
请确保update-app.sh 文件位于 /path/to/mdcx-docker目录下。
cd /path/to/mdcx-docker
# 确保有执行权限(执行一次即可)
chmod +x ./update-app.sh
# 阅读脚本,或使用`--help`参数查看相关帮助说明
./update-app.sh --help
⚠️ 同目录下必须要有
.env和.env.versions这个两个文件!.env示例文件为.env.sample。 另外update-app.sh脚本也可以完成第1次源码的部署处理。
如果你选择手动进行更新,请记得删除app目录下的
.mdcx_initialized文件!
cd /path/to/项目目录
docker-compose pull
docker-compose up -d
注意,只有使用docker-compose方式部署的才能用该方式更新镜像。 另外其实使用docker-compose方式部署的,也可以使用下面说的
watchtower进行更新。
推荐使用watchtower工具更新。
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
mdcx
个人不太建议自动更新,请自行斟酌。
示例:每天的凌晨2点进行更新
docker run -d --name watchtower-mdcx \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
-c --schedule "0 0 2 * * *" mdcx
0 0 2 * * *
6个部分分别为:
秒 分 时 日 月 星期
取消定时更新:
docker rm -f watchtower-mdcx
没有内置MDCx,需要自行下载MDCx源码并做相关准备。 对应的docker-compose yml示例文件:docker-compose.mdcx-base.sample.yml
内置了MDCx,相对方便一些,但不一定能跟上MDCx的更新进度。 对应的docker-compose yml示例文件:docker-compose.mdcx.sample.yml
支持运行MDCx的基础环境,非开发人员可以忽略。
参考如下文件:
Content type
Image
Digest
sha256:823aac929…
Size
381.1 MB
Last updated
over 3 years ago
docker pull stainless403/mdcx