From 270406dd156b59ca3d993711cb366198b207a291 Mon Sep 17 00:00:00 2001 From: Lev Rusanov <30170278+JDM170@users.noreply.github.com> Date: Thu, 21 Aug 2025 18:44:55 +0700 Subject: [PATCH] Update Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com> --- .gitignore | 1 + Dockerfile | 2 + README.md | 13 +++- config/minidlna.conf.tmpl | 135 ++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 13 +++- files/start.sh | 10 ++- 6 files changed, 169 insertions(+), 5 deletions(-) create mode 100644 .gitignore create mode 100644 config/minidlna.conf.tmpl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ce41811 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config/minidlna.conf \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8c8f747..32e18c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM alpine:3.22 +#USER 1000:1000 + RUN apk add --no-cache dumb-init minidlna minissdpd net-tools iproute2 COPY --chmod=755 files/start.sh /opt/start.sh diff --git a/README.md b/README.md index b680d0d..46fd47a 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,13 @@ docker build -t croc/minidlna . ## Run +The recommended method is to use with docker-compose file. +Check the example file in the repository. + +### with environment parameters + ``` -docker run -tid --name=minidlna --net=host -e SRVNAME=dockerlna -e "FOLDERS=/mnt/data/mp3,/mnt/data/movie,/mnt/data/torrent" -v /mnt/data/pub/:/mnt/data croc/minidlna +docker run -tid --name=minidlna --net=host -e SRVNAME=dockerlna -e "FOLDERS=/mnt/data/mp3;/mnt/data/movie;/mnt/data/torrent" -v /mnt/data/pub/:/mnt/data croc/minidlna ``` - `SRVNAME` - name of the minidlna server @@ -20,10 +25,14 @@ docker run -tid --name=minidlna --net=host -e SRVNAME=dockerlna -e "FOLDERS=/mnt Please use docker-compose file (from my Github page) for easier management. +### with config file + +1. use and edit config template file `config/minidlna.conf.tmpl` +2. save as `config/minidlna.conf` +3. run minidlna with docker-compose file without any environment variables, the volumes only: `docker-compose up -d` ## Known errors Container always restarts and `SSDP service start problem` message in the container logs. Check the 1900 UDP port on your docker host (example: `ss -lntpu | grep -i 1900` ) maybe already in use. Stop another UPNP service, like Jellyfin/Plex/Emby server to free up this port and try again. - diff --git a/config/minidlna.conf.tmpl b/config/minidlna.conf.tmpl new file mode 100644 index 0000000..39a80b0 --- /dev/null +++ b/config/minidlna.conf.tmpl @@ -0,0 +1,135 @@ +# This is the configuration file for the MiniDLNA daemon, a DLNA/UPnP-AV media +# server. +# +# Unless otherwise noted, the commented out options show their default value. +# +# On Debian, you can also refer to the minidlna.conf(5) man page for +# documentation about this file. + +# Specify the user name or uid to run as (root by default). +# On Debian system command line option (from /etc/default/minidlna) overrides this. +#user=minidlna + + +# Path to the directory you want scanned for media files. +# +# This option can be specified more than once if you want multiple directories +# scanned. +# +# If you want to restrict a media_dir to a specific content type, you can +# prepend the directory name with a letter representing the type (A, P or V), +# followed by a comma, as so: +# * "A" for audio (eg. #media_dir=A,/var/lib/minidlna/music) +# * "P" for pictures (eg. #media_dir=P,/var/lib/minidlna/pictures) +# * "V" for video (eg. #media_dir=V,/var/lib/minidlna/videos) +# * "PV" for pictures and video (eg. #media_dir=PV,/var/lib/minidlna/digital_camera) +#media_dir=/var/lib/minidlna + +# Set this to merge all media_dir base contents into the root container +# (The default is no.) +#merge_media_dirs=no + +# Path to the directory that should hold the database and album art cache. +#db_dir=/var/cache/minidlna + +# Path to the directory that should hold the log file. +#log_dir=/var/log/minidlna + +# Type and minimum level of importance of messages to be logged. +# +# The types are "artwork", "database", "general", "http", "inotify", +# "metadata", "scanner", "ssdp" and "tivo". +# +# The levels are "off", "fatal", "error", "warn", "info" or "debug". +# "off" turns of logging entirely, "fatal" is the highest level of importance +# and "debug" the lowest. +# +# The types are comma-separated, followed by an equal sign ("="), followed by a +# level that applies to the preceding types. This can be repeated, separating +# each of these constructs with a comma. +# +# The default is to log all types of messages at the "warn" level. +#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn + +# Use a different container as the root of the directory tree presented to +# clients. The possible values are: +# * "." - standard container +# * "B" - "Browse Directory" +# * "M" - "Music" +# * "P" - "Pictures" +# * "V" - "Video" +# * Or, you can specify the ObjectID of your desired root container +# (eg. 1$F for Music/Playlists) +# If you specify "B" and the client device is audio-only then "Music/Folders" +# will be used as root. +#root_container=. + +# Network interface(s) to bind to (e.g. eth0), comma delimited. +# This option can be specified more than once. +#network_interface= + +# Port number for HTTP traffic (descriptions, SOAP, media transfer). +# This option is mandatory (or it must be specified on the command-line using +# "-p"). +port=8205 + +# URL presented to clients (e.g. http://example.com:80). +#presentation_url=/ + +# Name that the DLNA server presents to clients. +# Defaults to "hostname: username". +friendly_name=docker-minidlna + +# Serial number the server reports to clients. +# Defaults to the MAC address of nework interface. +#serial= + +# Model name the server reports to clients. +#model_name=Windows Media Connect compatible (MiniDLNA) + +# Model number the server reports to clients. +# Defaults to the version number of minidlna. +#model_number= + +# Automatic discovery of new files in the media_dir directory. +#inotify=yes + +# List of file names to look for when searching for album art. +# Names should be delimited with a forward slash ("/"). +# This option can be specified more than once. +album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg +album_art_names=AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg +album_art_names=Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg + +# Strictly adhere to DLNA standards. +# This allows server-side downscaling of very large JPEG images, which may +# decrease JPEG serving performance on (at least) Sony DLNA products. +#strict_dlna=no + +# Support for streaming .jpg and .mp3 files to a TiVo supporting HMO. +#enable_tivo=no + +# Which method to use for registering in TiVo: 'bonjour' (default) or +# legacy 'beacon' +#tivo_discovery=bonjour + +# SSDP notify interval, in seconds. +#notify_interval=895 + +# Path to the MiniSSDPd socket, for MiniSSDPd support. +#minissdpdsocket=/run/minissdpd.sock + +# Always set SortCriteria to this value, regardless of the SortCriteria +# passed by the client +# e.g. force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title +#force_sort_criteria= + +# maximum number of simultaneous connections +# note: many clients open several simultaneous connections while streaming +#max_connections=50 + +# set this to yes to allow symlinks that point outside user-defined media_dirs. +#wide_links=no +media_dir=/media/mp3 +media_dir=/media/movies +media_dir=/media/tv_series diff --git a/docker-compose.yml b/docker-compose.yml index 27a3821..e39f820 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,8 @@ services: build: context: . dockerfile: Dockerfile + tags: + - jdm17/minidlna:latest container_name: docker-minidlna network_mode: host restart: unless-stopped @@ -11,9 +13,16 @@ services: - PORT=8205 # specify an UPNP interface if you have multiple network interface # - SSDP_IFACE=eth0 - - FOLDERS=/media/mp3,/media/movies,/media/tv_series + - FOLDERS=/media/mp3;/media/movies;/media/tv_series + # with types + # - FOLDERS=A,/media/mp3;P,/media/pictures;V,/media/movies;V,/media/tv_series volumes: - - /mnt/data/config:/var/lib/minidlna + - ./config:/var/lib/minidlna + # with config file + # uncomment or delete the full environment block if You use custom config file! + # - ./config/minidlna.conf:/etc/minidlna.conf:ro + # db dir + # - ./cache:/var/cache/minidlna - /mnt/data/pub/movies:/media/movies - /mnt/data/pub/tv_series:/media/tv_series - /mnt/data/pub/mp3:/media/mp3 diff --git a/files/start.sh b/files/start.sh index 3cc340a..de487f8 100644 --- a/files/start.sh +++ b/files/start.sh @@ -2,6 +2,8 @@ if [ ! -e /etc/minidlna.configured ] then + echo "Configuring minidlna ..." + # set friendly name sed -i "s@.*friendly_name=.*@friendly_name=$SRVNAME@g" /etc/minidlna.conf # set port @@ -11,12 +13,18 @@ then # remove media folders sed -i s@media_dir=@\#media_dir=@g /etc/minidlna.conf # add media folders to the end of file - for folder in $( echo $FOLDERS | tr ',' '\0' | xargs -0 echo ) + for folder in $( echo $FOLDERS | tr ';' '\0' | xargs -0 echo ) do echo "media_dir=$folder" >> /etc/minidlna.conf done + + # inotify config + sed -i s@.*inotify=.*@inotify=yes@g /etc/minidlna.conf + # create configured flag file date > /etc/minidlna.configured +else + echo "Using already exists config (/etc/minidlna.conf), starting minidlna ..." fi # minissdp