diff --git a/Dockerfile b/Dockerfile index b55acbc..b7c02a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM debian +FROM debian:10 -RUN apt-get update && apt-get install -y minidlna vim net-tools +RUN apt-get update && apt-get install -y minidlna minissdpd net-tools COPY files/start.sh /opt/start.sh RUN chmod 755 /opt/start.sh diff --git a/README.md b/README.md index ffb5aca..b680d0d 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,18 @@ docker build -t croc/minidlna . ## Run ``` -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 /opt/start.sh +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 - - `FOLDERS` - list of the shared folders in your volume (/mnt/data) + - `SRVNAME` - name of the minidlna server + - `FOLDERS` - list of the shared folders on your volume (/mnt/data) Please use docker-compose file (from my Github page) for easier management. +## 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/docker-compose.yml b/docker-compose.yml index c2a4c89..5c10843 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,8 @@ services: environment: - SRVNAME=docker-minidlna - PORT=8205 + # specify an UPNP interface if you have multiple network interface + #- SSDP_IFACE=eth0 - FOLDERS=/media/mp3,/media/movies,/media/tv_series volumes: - '/mnt/data/pub/movies:/media/movies' diff --git a/files/start.sh b/files/start.sh index 760218c..cc716ea 100644 --- a/files/start.sh +++ b/files/start.sh @@ -2,24 +2,46 @@ if [ ! -e /etc/minidlna.configured ] then + # set friendly name + sed -i "s@.*friendly_name=.*@friendly_name=$SRVNAME@g" /etc/minidlna.conf + # set port + [ -z $PORT ] && { PORT=8201; } + sed -i "s@port=.*00@port=$PORT@g" /etc/minidlna.conf + + # remove media folders sed -i s@media_dir=@\#media_dir=@g /etc/minidlna.conf - - echo "friendly_name=$SRVNAME" >> /etc/minidlna.conf - + # add media folders to the end of file for folder in $( echo $FOLDERS | xargs -d',' ) do echo "media_dir=$folder" >> /etc/minidlna.conf done - [ -z $PORT ] && { PORT=8201; } - sed -i "s@port=.*00@port=$PORT@g" /etc/minidlna.conf - date > /etc/minidlna.configured fi +# minissdp +# get interfaces +if [ -z "$SSDP_IFACE" ] +then + SSDP_INTERFACE="$( ip addr | grep -i up | egrep -iv '(lo|br-|veth|docker).*:' | cut -f2 -d':' | tr -d ' ' )" + if [ $( echo "$INTERFACE" | wc -l ) -gt 1 ] + then + echo -e "You have more than one interface, choose one!:\n$SSDP_INTERFACE" + exit 1 + fi + SSDP_IFACE=$SSDP_INTERFACE +fi +if [ $( ss -lntpu | grep -i 1900 | wc -l ) -gt 0 ] +then + echo "Warning, another UPNP service use same UDP port!" + echo " Please stop another server and try again." +fi +minissdpd -i $SSDP_IFACE || { echo "SSDP service start problem"; exit 1; } + + # remove stucked pid file rm -f /run/minidlna/minidlna.pid # start minidlna -minidlnad -d +minidlnad -d -v #/bin/bash