## 前言
黑群晖装好后,最强大的功能就是 Docker。通过 Docker 可以一键部署各种服务:下载工具、媒体服务器、私有网盘、照片管理……本教程教你从 Docker 基础配置开始,逐个部署最常用的 6 个服务,每个都有完整的 docker-compose 配置和操作说明。
## 一、Docker 环境配置
### 第1步:安装 Docker 套件
1. 打开 DSM → **套件中心**
2. 搜索 **Container Manager**(DSM 7.2 叫这个)或 **Docker**(DSM 7.1)
3. 点击 **安装** → 等待安装完成
### 第2步:开启 SSH 并连接
“`
控制面板 → 终端机和 SNMP → 启用 SSH 功能
“`
电脑终端执行:
“`bash
ssh 你的管理员名@黑群晖IP
# 输入密码
“`
### 第3步:配置 Docker 镜像加速
“`bash
# 编辑 Docker 配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://dockerpull.org",
"https://dockerhub.icu"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
# 重启 Docker
sudo systemctl restart docker
```
### 第4步:创建目录结构
```bash
# 在共享文件夹中创建 Docker 数据目录
sudo mkdir -p /volume1/docker/{jellyfin,qbittorrent,navidrome,frpc,alist,lucky}
```
## 二、部署 Jellyfin 媒体服务器
Jellyfin 是完全免费开源的媒体服务器,可以看电影、电视剧、动漫。
### docker-compose.yml
```bash
sudo tee /volume1/docker/jellyfin/docker-compose.yml <<'EOF'
version: "3.8"
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- JELLYFIN_PublishedServerUrl=http://黑群晖IP:8096
volumes:
- /volume1/docker/jellyfin/config:/config
- /volume1/docker/jellyfin/cache:/cache
- /volume1/media/movies:/media/movies:ro
- /volume1/media/tv:/media/tv:ro
- /volume1/media/anime:/media/anime:ro
ports:
- "8096:8096" # Web 界面
- "8920:8920" # HTTPS
- "7359:7359/udp" # 客户端发现
restart: unless-stopped
EOF
```
### 启动
```bash
cd /volume1/docker/jellyfin
sudo docker compose up -d
```
### 访问
浏览器打开 `http://黑群晖IP:8096`,按向导添加媒体库。
## 三、部署 qBittorrent 下载工具
### docker-compose.yml
```bash
sudo tee /volume1/docker/qbittorrent/docker-compose.yml <<'EOF'
version: "3.8"
services:
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- WEBUI_PORT=8080
volumes:
- /volume1/docker/qbittorrent/config:/config
- /volume1/downloads:/downloads
ports:
- "8080:8080" # Web 管理界面
- "6881:6881" # BT 下载端口
- "6881:6881/udp"
restart: unless-stopped
EOF
```
### 启动和访问
```bash
cd /volume1/docker/qbittorrent
sudo docker compose up -d
```
浏览器打开 `http://黑群晖IP:8080`
默认账号:`admin` 默认密码:`adminadmin`
> **首次登录后立即修改密码!**
## 四、部署 Alist 文件管理器
Alist 支持网盘聚合,可以统一管理阿里云盘、百度网盘、天翼云盘等。
### docker-compose.yml
“`bash
sudo tee /volume1/docker/alist/docker-compose.yml <<'EOF'
version: "3.8"
services:
alist:
image: xhofe/alist:latest
container_name: alist
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
volumes:
- /volume1/docker/alist/data:/opt/alist/data
ports:
- "5244:5244"
restart: unless-stopped
EOF
```
### 获取初始密码
```bash
sudo docker logs alist 2>&1 | grep password
# 输出类似:initial password: xxxxxxxx
“`
### 访问
浏览器打开 `http://黑群晖IP:5244`,用初始密码登录后修改。
## 五、部署 NaviDrome 音乐服务器
### docker-compose.yml
“`bash
sudo tee /volume1/docker/navidrome/docker-compose.yml <<'EOF'
version: "3.8"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- ND_SCANSCHEDULE=1h
- ND_LOGLEVEL=info
- ND_SESSIONTIMEOUT=24h
volumes:
- /volume1/docker/navidrome/data:/data
- /volume1/media/music:/music:ro
ports:
- "4533:4533"
restart: unless-stopped
EOF
```
### 访问
浏览器打开 `http://黑群晖IP:4533`,创建管理员账号。
## 六、部署 frpc 内网穿透
让外网也能访问你的黑群晖服务。
### docker-compose.yml
```bash
sudo tee /volume1/docker/frpc/docker-compose.yml <<'EOF'
version: "3.8"
services:
frpc:
image: snowdreamtech/frpc:latest
container_name: frpc
volumes:
- /volume1/docker/frpc/frpc.toml:/etc/frp/frpc.toml
restart: unless-stopped
EOF
```
### frpc.toml 配置
```bash
sudo tee /volume1/docker/frpc/frpc.toml <<'EOF'
serverAddr = "你的VPS公网IP"
serverPort = 7000
auth.token = "你的frps密码"
[[proxies]]
name = "dsm-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5000
remotePort = 5000
[[proxies]]
name = "jellyfin"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8096
remotePort = 8096
[[proxies]]
name = "qbittorrent"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080
EOF
```
## 七、一键管理所有容器
### 启动所有服务
```bash
for dir in /volume1/docker/*/; do
if [ -f "$dir/docker-compose.yml" ]; then
echo "启动: $dir"
cd "$dir" && sudo docker compose up -d
fi
done
```
### 查看所有容器状态
```bash
sudo docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
```
### 更新所有容器
```bash
for dir in /volume1/docker/*/; do
if [ -f "$dir/docker-compose.yml" ]; then
echo "更新: $dir"
cd "$dir" && sudo docker compose pull && sudo docker compose up -d
fi
done
sudo docker image prune -f
```
## 八、常见报错解决
| 报错 | 原因 | 解决方案 |
|------|------|---------|
| `镜像拉取超时` | 国内网络问题 | 配置镜像加速器 |
| `端口被占用` | DSM 自带服务占了端口 | 换一个映射端口 |
| `权限不足读写文件` | PUID/PGID 设置不对 | 设为 0(root) |
| `容器启动后立即退出` | 配置文件格式错误 | `docker logs 容器名` 查看错误 |
| `数据丢失` | volumes 没映射 | 必须映射数据目录 |
| `Jellyfin 转码失败` | 没有硬件加速 | 低配用 CPU 软解即可 |
| `qBittorrent 下载慢` | 端口未开放 | 路由器映射 6881 端口 |
| `Alist 挂载网盘失败` | Token 过期 | 重新获取网盘 Token |
## 九、避坑总结
1. 所有数据目录必须映射到 `/volume1/`,不然容器重建数据就没了
2. PUID/PGID 设 0 最省事,避免各种权限问题
3. 每个服务一个独立目录,方便管理和备份
4. 镜像加速器必配,国内不配基本拉不动
5. 定期用 `docker image prune` 清理无用镜像释放空间
6. 重要数据务必备份 config 目录
7. 不要用 latest 标签盲目更新,有重大版本更新先看 changelog
本文由技术保姆网 JSBMW.CN 原创,转载请注明出处。