Docker Compose Collection
Transmission-TPE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
services:
transmission:
image: chisbread/transmission:latest # TR with TPE
container_name: transmission-tpe
environment:
- TZ=Asia/Shanghai
- PUID=0
- PGID=0
# - USER=
# - PASS=
# - TRANSMISSION_WEB_HOME=/transmission-web-control
volumes:
- /share/Container/transmission-tpe/config:/config
- /share/Container/transmission-tpe/downloads:/downloads
- /share:/share
ports:
- 6362:9091 # Transmission Web UI port
- 62002:62002 # Default Transmission port
- 62002:62002/udp # Default Transmission port (UDP)
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
qBittorrent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
qbittorrent:
image: linuxserver/qbittorrent:14.3.9
container_name: qbittorrent
environment:
- TZ=Asia/Shanghai
- PUID=0
- PGID=0
- WEBUI_PORT=8080
- TORRENTING_PORT=62000
volumes:
- /share/Container/qbittorrent/config:/config
- /share/Container/qbittorrent/qb-webui:/qb-webui
- /share:/share
ports:
- 6360:8080 # WebUI port
- 62000:62000 # Torrent port
- 62000:62000/udp # Torrent port (UDP)
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
Fix unauthorized
Shutdown the container
Add
WebUI\HostHeaderValidation=false
toqBittorrent.conf
Change password
1
2
1. Log into WebUI
2. Tools -> Options -> Web UI -> Authentication
IYUUPlus-dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14
services:
iyuuplus-dev:
image: iyuucn/iyuuplus-dev:latest
container_name: IYUUPlus
volumes:
- /share/Container/iyuuplus-dev/iyuu:/iyuu
- /share/Container/iyuuplus-dev/data:/data
- /share:/share
ports:
- "8780:8780"
network_mode: bridge
restart: unless-stopped
stdin_open: true
tty: true
Jellyfin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
user: 0:0
volumes:
- /share/Container/jellyfin/config:/config
- /share/Container/jellyfin/cache:/cache
- /share:/media # Change to your media path
extra_hosts:
- 'host.docker.internal:host-gateway'
devices:
- /dev/dri:/dev/dri # Enable GPU Transcoding
ports:
- 8096:8096
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
Jekyll
1
2
3
4
5
6
7
8
9
10
11
12
services:
jekyll:
image: bretfisher/jekyll-serve
volumes:
- /share/Container/jekyll/zhengyuan-public.github.io:/site
- /share/Container/jekyll/bundle:/usr/local/bundle
ports:
- 4000:4000
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
Vaultwarden
1
2
3
4
5
6
7
8
9
10
11
12
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
volumes:
- /share/Container/vaultwarden/vw-data:/data/
ports:
- 8888:80
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
DuckDNS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns-dc
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- SUBDOMAINS={YOUR_SUBDOMAIN_HERE} # Without the "duckdns.org" suffix
- TOKEN={YOUR_TOKEN_HERE}
- UPDATE_IP=ipv4
- LOG_FILE=false
volumes:
- /share/Container/duckdns/config:/config
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
Nginx Proxy Manager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- 63000:81 # Admin port
- 63001:80
- 63002:443
# Add any other Stream port you want to expose
# - '21:21' # FTP
# environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- /share/Container/nginx-proxy-manager/data:/data
- /share/Container/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
Navidrome
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
services:
navidrome:
image: deluan/navidrome:latest
user: 0:0 # should be owner of volumes
environment:
# Optional: put your config options customization here. Examples:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ''
ports:
- 4533:4533
volumes:
- /share/Container/navidrome/data:/data
- /share/Music/__Navidrome:/music:ro
- /share/Music:/share/Music
network_mode: bridge
restart: unless-stopped
stdin_open: true # Enable stdin
tty: true # Allocate a pseudo-TTY
*Entware-std
To install additional packages on QNAP NAS, download Entware-std
from here.
1
2
$ opkg update
$ opkg install tree
1
2
3
4
5
6
7
[/share/Music/__Navidrome] # tree
.
├── Albums
│ └── 100 Best Encores Classics -> /share/Music/Albums/100 Best Encores Classics/
├── Singles
│ └── Dire Straits - Sultans Of Swing.flac
└── syamlink_tar_folder.sh
*Helper Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# Use absolute syamlink for Navidrome
# Check if a directory was provided as an argument
if [ -z "$1" ]; then
echo "Usage: $0 <target_directory>"
exit 1
fi
TARGET_DIR="$1"
# Ensure the target directory exists
if [ ! -d "$TARGET_DIR" ]; then
echo "Error: Target directory does not exist."
exit 1
fi
# Get the base name of the target directory
BASE_NAME=$(basename "$TARGET_DIR")
# Define the syamlink path
SyamlINK_PATH="/share/Music/__Navidrome/Albums/$BASE_NAME"
# Create the syamlink
ln -s "$TARGET_DIR" "$SyamlINK_PATH"
# Check if the syamlink was created successfully
if [ -L "$SyamlINK_PATH" ]; then
echo "Syamlink created successfully: $SyamlINK_PATH -> $TARGET_DIR"
else
echo "Error: Failed to create syamlink."
exit 1
fi
1
2
[/share/Music/__Navidrome] # ./syamlink_tar_folder.sh /share/Music/Albums/demo
Syamlink created successfully: /share/Music/__Navidrome/Albums/demo -> /share/Music/Albums/demo
This post is licensed under CC BY 4.0 by the author.