- 示例工程
【免费下载链接】awesome-compose
Awesome Docker Compose samples
本文以 awesome-compose 仓库中的plex单服务示例为主线,完整讲解如何通过一份 compose.yaml 与 .env 配置,在本地 Docker 环境中一键拉起 Plex 媒体服务器,并覆盖镜像选择、host 网络模式、媒体目录挂载、版本管理变量、硬件加速注意事项以及容器启停与数据清理等完整流程。读完本文,你将能够独立复现该示例,并理解每个配置项背后的作用与调整方向。
示例概览:一个单服务、极简的 Plex 部署
Plex 是一款流行的媒体服务器软件,可将本地的电影、剧集、照片与音乐整理成媒体库,并通过 Web 界面与各类客户端进行串流播放。awesome-compose 仓库中的plex示例为该用途提供了一个"开箱即跑"的基础配置:整个项目只有三个文件:
plex/ ├── .env ├── compose.yaml └── README.md- compose.yaml:定义 Plex 容器的完整 Compose 服务配置;
- .env:存放部署前必须自定义的环境变量(媒体路径);
- README.md:官方说明文档,包含部署、验证与清理命令。
该示例被归类在仓库根 README.md 的 "Single service samples"(单服务示例)一节中,定位是本地开发环境或个人用途的基础搭建,不属于生产级部署方案。
compose.yaml 逐项解析
示例的完整 Compose 文件如下(来自 compose.yaml):
services: plex: image: linuxserver/plex container_name: plex network_mode: host environment: - VERSION=docker restart: always volumes: - ${PLEX_MEDIA_PATH}:/media/下面逐项说明每个字段的含义与影响:
| 配置项 | 取值 | 作用与说明 |
|---|---|---|
image | linuxserver/plex | 使用 linuxserver 社区维护的 Plex 镜像(README 中展示的完整写法为linuxserver/plex:latest,即默认拉取最新标签)。该镜像以其易用性、完善的文档和活跃维护著称;你也可以替换为其他镜像,例如 Plex 官方维护的plexinc/pms-docker镜像。 |
container_name | plex | 固定容器名,方便在docker ps、docker logs等命令中直接按名称操作。 |
network_mode | host | 使用宿主机网络模式,容器直接共享宿主机的网络栈。Plex 的默认 Web 端口 32400 因此直接暴露在宿主机上,访问http://localhost:32400/web即可打开管理界面,无需额外编写ports映射。 |
environment.VERSION | docker | linuxserver 镜像专有的版本管理变量,表示 Plex 应用的更新节奏由 Docker 镜像更新流程控制(即通过拉取新镜像重建容器来升级),而非容器内部自行升级。 |
restart | always | 容器异常退出或 Docker 守护进程重启后自动拉起,适合需要长期运行的媒体服务器。 |
volumes | ${PLEX_MEDIA_PATH}:/media/ | 将宿主机上由.env中PLEX_MEDIA_PATH指定的媒体目录挂载到容器内的/media/,供 Plex 扫描与读取媒体文件。 |
注意:示例出于简洁考虑只挂载了媒体目录,没有为 Plex 的配置库(
/config)单独声明持久化卷。在实际长期使用中,通常还需要额外挂载一个配置目录,以保证媒体库元数据、封面与播放进度等不会因容器重建而丢失——这属于基于该基础配置的常见扩展方向,可结合你使用的镜像文档进一步调整。
host 网络模式的使用前提
network_mode: host是 linuxserver 版 Plex 容器最常用的网络方案,因为它能天然规避 UPnP、局域网发现等对多网卡/端口的要求。但它也有明确的适用前提:
- 该模式在 Linux 宿主机上工作正常;
- 在 macOS 与部分 Windows Docker Desktop 环境中,host 网络模式的支持与行为有限,端口暴露方式可能不一致;
- 使用 host 模式后,容器不再拥有独立的网络命名空间,因此 Compose 文件中不再需要(也不建议)同时声明
ports,否则可能产生端口绑定冲突。
如果需要在其他网络模式下运行,可自行改为network_mode: bridge(默认)并显式声明ports: - "32400:32400",此时局域网内其他设备需通过宿主机 IP 访问。
.env:部署前必须配置的媒体路径
示例采用 Compose 的变量替换机制:compose.yaml中的${PLEX_MEDIA_PATH}会在启动时从同目录下的 .env 文件读取。默认内容为:
PLEX_MEDIA_PATH=/media/your/plex/path部署前,请将PLEX_MEDIA_PATH改为宿主机上真实存放媒体文件的目录,例如:
PLEX_MEDIA_PATH=/data/plex/media该值会被原样挂载到容器的/media/目录。配置要点:
- 路径必须是宿主机上的绝对路径(容器侧挂载点固定为
/media/); - 目录需要存在且对 Docker 守护进程可读;
- 修改
.env后,需要重新执行docker compose up -d让新值生效(可加--force-recreate强制重建容器)。
硬件加速(Hardware Acceleration)
Plex 的硬件加速(硬件转码)能力依赖宿主机的 GPU 设备透传给容器,该功能由 linuxserver 的 Plex 镜像提供支持,具体说明位于 linuxserver 的 docker-plex 文档中,README 中也明确指引读者前往该文档查看详细描述。硬件加速通常还涉及 Plex Pass 订阅权限以及宿主机 GPU 驱动(如 Intel Quick Sync、NVIDIA 等)的安装与设备挂载。由于不同 GPU、驱动与镜像版本的组合差异较大,建议在启用前:
- 确认你的 Plex 账号具备硬件转码权限;
- 查阅你所选 Plex 镜像(linuxserver 或官方镜像)关于 GPU 透传与设备参数的文档;
- 在真实设备上小范围验证转码效果后再全面启用。
部署与访问
进入plex示例目录,执行:
$ docker compose up -d Starting plex ... done-d参数让容器在后台运行。由于network_mode: host,Plex 的 Web 界面直接监听在宿主机的 32400 端口,浏览器访问:
http://localhost:32400/web即可打开 Plex Web 管理界面,按向导完成初始化(登录 Plex 账号、命名服务器、添加媒体库并指向/media/下挂载的目录)。
验证运行结果
容器启动后,可用docker ps确认状态。README 给出的预期输出如下:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 62fc3ff1f1a0 linuxserver/plex:latest "/init" 38 seconds ago Up 3 seconds plex可以看到容器以plex名称运行,镜像为linuxserver/plex:latest,入口命令为/init。由于使用了 host 网络模式,PORTS列不会显示端口映射,这是符合预期的——端口已直接绑定在宿主机上。
如果容器未正常启动,可依次排查:
$ docker logs plex # 查看容器日志 $ docker compose ps # 查看 Compose 服务状态停止容器与清理数据
停止并移除该示例创建的容器:
$ docker compose down如果希望连同 Compose 创建的匿名卷等数据一并删除(示例中即挂载配置与运行时产生的数据),使用:
$ docker compose down -v注意:
-v会删除与该 Compose 项目关联的卷数据,媒体文件本身位于宿主机目录(由PLEX_MEDIA_PATH指定)中,不受影响;但任何写在容器卷内的配置数据会被清除,请谨慎使用。
扩展方向与注意事项
基于该基础示例,常见扩展方向包括:
- 更换镜像:README 明确指出,除了 linuxserver 镜像外,也可以使用 Plex 官方镜像(
plexinc/pms-docker),两者在环境变量、挂载点与启动方式上略有差异,切换时需对照各自文档调整配置; - 持久化配置目录:为
/config增加命名卷或宿主目录挂载,避免重建容器后媒体库元数据丢失; - 自定义
VERSION策略:linuxserver 镜像的VERSION变量用于控制 Plex 更新行为,除docker外还有其他取值(如跟随最新版本等),具体语义以镜像文档为准; - 媒体库多目录:可在
volumes中追加多个${HOST_PATH}:${CONTAINER_PATH}条目,将电影、剧集、照片等分别挂载到不同容器目录,便于在 Plex 中按类型建库。
最后需要强调适用范围:与仓库根 README.md 的声明一致,包括本示例在内的所有 Compose 样例均面向本地开发环境与个人使用,用于快速起步和功能验证,不应直接照搬部署到生产环境。如需生产级运行,请结合官方镜像文档、配置持久化、安全加固与备份方案综合设计。
- 示例工程
【免费下载链接】awesome-compose
Awesome Docker Compose samples
相关推荐
Spark Java 应用容器化部署实战:基于 Awesome Compose 的 Docker Compose 单服务示例
Spark Java 应用容器化部署实战:基于 Awesome Compose 的 Docker Compose 单服务示例 本篇技术指南以仓库中的 spark
示例工程Docker Compose 实战:React + Express + MySQL 三服务应用部署全指南(awesome-compose 示例解析)
Docker Compose 实战:React + Express + MySQL 三服务应用部署全指南(awesome compose 示例解析) 本指南基于
示例工程Luanti(原 Minetest)Docker 服务器部署指南:镜像标签、数据持久化与 Docker Compose 实战
Luanti(原 Minetest)Docker 服务器部署指南:镜像标签、数据持久化与 Docker Compose 实战 本篇技术指南以仓库中的 doc/d
游戏开发图形学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考