Yannis blog

Deploy MiniDLNA using docker-compose

07 Nov 2022

Here you can find detailed instructions on how to run a dockerized MiniDLNA Server with docker-compose and create a systemd service to handle it.

Docker

Make sure to have Docker and Docker-compose installed. For Debian Linux you just need to install the following packages.

apt update && apt install -y docker-ce docker-compose

Docker application location

In order to run the container we need to create a location eg: /opt/containers/minidlna and store our configuration in there.

mkdir -p /opt/containers/minidlna

Configuration

In order to run the MiniDLNA server we need to specify the following environment variables

  • GROUP_ID=0 is mandatory and specifies the user ID (UID) that will run the server
  • USER_ID=0 is mandatory and specifies the group ID (GID) that will run the server
  • MINIDLNA_PATH is mandatory and specifies the path in the Host for the container data
  • MEDIA_PATH is mandatory and specifies the path in the Host where the multimedia files reside in

/opt/containers/minidlna/.env defines all necessary environment variables

GROUP_ID=0
USER_ID=0
MINIDLNA_PATH=/opt/containers/minidlna
MEDIA_PATH=/media

Compose File

/opt/containers/minidlna/docker-compose.yml defines the services, networks, and volumes for the MiniDLNA Docker application

Make sure to have the following directories in the media location Images, Music, Photos and Videos or else you need to edit the compose file and remove the appropriate environment and volume entries.

version: "3"
services:
  minidlna:
    restart: always
    image: vladgh/minidlna:latest
    network_mode: "host"
    environment:
      - PUID=${USER_ID}
      - PGID=${GROUP_ID}
      - MINIDLNA_MEDIA_DIR_1=PV,/media/Images
      - MINIDLNA_MEDIA_DIR_2=A,/media/Music
      - MINIDLNA_MEDIA_DIR_3=PV,/media/Photos
      - MINIDLNA_MEDIA_DIR_4=V,/media/Videos
      - MINIDLNA_DB_DIR=/minidlna/cache
      - MINIDLNA_LOG_DIR=/minidlna/log
      - MINIDLNA_FRIENDLY_NAME=DLNA-server
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ${MEDIA_PATH}/Images:/media/Images:ro
      - ${MEDIA_PATH}/Music:/media/Music:ro
      - ${MEDIA_PATH}/Photos:/media/Photos:ro
      - ${MEDIA_PATH}/Videos:/media/Videos:ro
      - ${MINIDLNA_PATH}/cache:/minidlna/cache
      - ${MINIDLNA_PATH}/log:/minidlna/log

Systemd service definition

/etc/systemd/system/docker-compose-mininidlna.service defines the service that starts and stops the Docker application for the system

[Unit]
Description=MiniDLNA container
Requires=docker.service
After=docker.service

[Service]
Type=simple
WorkingDirectory=/opt/containers/miniDLNA
ExecStart=/usr/bin/docker-compose up --force-recreate --remove-orphans
ExecStop=/usr/bin/docker-compose down

[Install]
WantedBy=default.target

Enable and run service

source  /opt/containers/minidlna/.env && mkdir -p "${MINIDLNA_PATH}/log" "${MINIDLNA_PATH}/cache"
systemctl daemon-reload && \
systemctl enable docker-compose-minidlna && \
systemctl start docker-compose-minidlna

Visit MiniDLNA page

You should be able to visit your container at port 8200 using the Host IP. eg: https://127.0.0.1:8200