I ran into the same problem when first setting up a similar program stack. The problem I found was that some programs need to have the rclone mount setup before they first attempt to access the local folders. Just allowing the programs to start randomly would typically result in I/O errors.
My solution was to use the healthcheck feature of docker-compose to ensure that the mount was accessible before anything downstream booted. I placed a small “test” file in the mount and wait until it’s available. I use bash, which means the rclone container needs to have it installed. Below is the dockerfile I use for rclone and my docker-compose file that controls the boot-up sequence.
One thing to note: only docker-compose uses the depends-on argument, so when your server boots-up the default is that docker starts the containers at random. You can get around this by turning off the auto-start using docker and then setting a cron-job that runs the docker-compose up commands at start-up.
Rclone Dockerfile
FROM rclone/rclone:latest
RUN apk update &&
apk add bash
docker-compose.yml version: ‘3.5’
services:
## rclone
rclone-plex-media:
build: ./rclone/
container_name: rclone-plex-media
environment:
- RCLONE_CONFIG=/config/rclone.conf
cap_add:
- SYS_ADMIN
privileged: true
devices:
- /dev/fuse
restart: unless-stopped
volumes:
- ./rclone/plex-media:/mnt/docker/media/rclone/plex-media-internal:shared
- ./rclone/plex-cache:/cache
- ./rclone/plex-config:/config
command: mount "plex-encrypted:" "/mnt/docker/media/rclone/plex-media-internal" --uid 1000 --gid 1000 --umask 002 --default-permissions --allow-non-empty --allow-other --vfs-cache-mode full --cache-dir "/cache/" --vfs-cache-max-size 50G --dir-cache-time 1000h --vfs-cache-max-age 9999h --vfs-write-back 24h --log-level INFO --poll-interval=15s --stats 1m
healthcheck:
test: bash -c "[ -f /mnt/docker/media/rclone/plex-media-internal/test.txt ]"
interval: 30s
retries: 3
start_period: 30s
timeout: 5s
## Streaming - Plex
plex:
image: plexinc/pms-docker
container_name: plex
environment:
- TZ=America/New_York
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
network_mode: host
volumes:
- ./plex/config:/config
- ./plex/transcode:/transcode
- ./rclone/plex-media:/data
depends_on:
rclone-plex-media:
condition: service_healthy
## Plex Scan Trigger - Autoscan
autoscan:
image: cloudb0x/autoscan
container_name: autoscan
environment:
- PUID=1000
- PGID=1000
volumes:
- ./autoscan/config:/config
- ./rclone/plex-media:/mnt/unionfs:ro
ports:
- 3030:3030
restart: unless-stopped
depends_on:
plex:
condition: service_healthy
## Media Management - Deluge
deluge:
image: binhex/arch-delugevpn
container_name: deluge
privileged: true
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
volumes:
- ./deluge/downloads:/downloads
- ./deluge/config:/config
- /etc/localtime:/etc/localtime:ro
environment:
- VPN_ENABLED=yes
- VPN_USER=REMOVED
- VPN_PASS=REMOVED
- VPN_PROV=REMOVED
- VPN_CLIENT=wireguard
- STRICT_PORT_FORWARD=yes
- ENABLE_PRIVOXY=yes
- LAN_NETWORK=192.168.2.0/24
- NAME_SERVERS=REMOVED
- DELUGE_DAEMON_LOG_LEVEL=info
- DELUGE_WEB_LOG_LEVEL=info
- VPN_INPUT_PORTS=1234
- VPN_OUTPUT_PORTS=5678
- DEBUG=false
- UMASK=000
- PUID=1000
- PGID=1000
ports:
- 8112:8112
- 8118:8118
- 58846:58846
- 58946:58946
healthcheck:
test: "curl -f http://localhost:8112 || exit 1"
interval: 10s
retries: 3
start_period: 600s
timeout: 5s
restart: unless-stopped
## Media Management - Prowlarr
prowlarr:
image: lscr.io/linuxserver/prowlarr:develop
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./prowlarr/config:/config
ports:
- 9696:9696
restart: unless-stopped
healthcheck:
test: "curl -f http://localhost:9696 || exit 1"
interval: 10s
retries: 6
start_period: 5s
timeout: 5s
depends_on:
rclone-plex-media:
condition: service_healthy
deluge:
condition: service_healthy
## Media Management - Radarr
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./radarr/config:/config
- ./rclone/plex-media/Movies:/movies
- ./deluge/downloads:/downloads
ports:
- 7878:7878
restart: unless-stopped
healthcheck:
test: "curl -f http://localhost:7878 || exit 1"
interval: 10s
retries: 6
start_period: 5s
timeout: 5s
depends_on:
rclone-plex-media:
condition: service_healthy
prowlarr:
condition: service_healthy
## Media Management - Sonarr
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./sonarr/config:/config
- './rclone/plex-media/TV Shows:/tv'
- ./deluge/downloads:/downloads
ports:
- 8989:8989
restart: unless-stopped
healthcheck:
test: "curl -f http://localhost:8989 || exit 1"
interval: 10s
retries: 6
start_period: 5s
timeout: 5s
depends_on:
rclone-plex-media:
condition: service_healthy
prowlarr:
condition: service_healthy
One more thing. I’d highly recommend using vfs-cache for rclone since it takes care of moving the files to your remote source. You can see in my setup rclone will keep a local copy for 24 hrs and then automatically transfer it to the remote.
I was originally using an external script to copy/move files but vfs-cache is so much easier. Just let rclone handle everything in the background.