[How to] Prepare OMV to install docker applications



    This guide aims to establish a method to install an application in docker successfully, avoiding permissions, volumes or ports problems.

    • It is assumed that the user has already configured their OMV system and its file system for data (in this guide it will be the "DATA" folder). SSH access is assumed to be enabled and available with the root user and password set during OMV installation.


    Docker is a technology that enables the creation and use of Linux containers. A container is one or more applications and their dependencies, grouped and isolated from each other, that run on the same operating system kernel. Docker allows us to install, uninstall, modify, update applications as many times as we want without causing damage to the system.

    To use docker we need to define the following parameters:

    • A SPACE in our file system where we will host the containers. A 60GB or larger SSD is recommended, independent of our data file system. We gain speed and security. We divide this space into two parts, dedicated to PROGRAM files and CONFIGURATION files.
      • PROGRAM FILES: They are downloaded and configured automatically, they are "expendable", they can be easily downloaded and installed again. It is a good idea to place them outside of the OMV system disk to avoid problems. We will save them in a folder that we will call "docker".
      • CONFIGURATION FILES: They are created, modified and customized during the use of the application. Passwords, personal settings, databases, etc. depending on the case. These files are irreplaceable, we must keep them if we want to always keep the application in the same state. We will save them in a folder that we will call "config". It is a good idea to make regular backups of this folder.
    • A USER to run docker with. For security reasons, it is convenient to do it this way so as not to grant the application more permissions than necessary. In this guide it will be "userapp", and he must have access to the space that we dedicate to docker and the data used by the application.


    1. Install an SSD disk for docker. Install OMV-Extras

    2. To facilitate access to the disks we create two symbolic links /SSD and /DATA

    • In the OMV GUI we go to the section <<System>> then <<Plugins>> we look for the plugin "openmediavault-symlinks" and we select it and click "+ Install" in the upper menu.
    • In the section <<Storage>> then <<File system>>, we open the column "Mount point" and we look at which is the mounting point of the SSD disk.
    • In the section <<Services>> then <<Symlinks>> click on "+ Add".
    • In the window we click on the folder icon to the right of "origin", we look for the mounting path of the SSD disk and we select it. In "Destination" we write /SSD and press save.
    • We repeat the process in our file system with the folder where we have the data and create the symbolic link /DATA

    3. Create folders for Docker files.

    • We open a terminal in putty with the root user and type:

    mkdir /SSD/docker

    mkdir -m 770 /SSD/config

    chgrp users /SSD/config

    4. Change the location of the docker PROGRAM files to the "docker" folder on the SSD. Install Docker and Portainer.

    • In the OMV GUI, go to the <<OMV-Extras>> section, click on the "Docker" tab and in the "Dockers Storage" field replace the value with the path of the "docker" folder. A symlink will no work here. Example: /srv/dev-disk-by-uuid-861acf8c-761a-4b60-9123-3aa98d445f7d/docker
    • Install docker: Click on the "Docker" tab in the top menu and click on "Install".
    • Install Portainer: Click on the "Portainer" tab in the top menu and click on "Install".

    5. Create the user "userapp".

    • In the OMV GUI we go to the <<Access Permissions>> section, then <<User>> click on "+ Add" and create the user "userapp", previously adding it to the groups "user" and "docker" in the "Groups" tab".
    • We open the UID and GID columns and take note of the values that the user "userapp" has. Example UID=1002 GID=100 This may vary on your system

    Installation example:

    6. Choose an stack

    • On the web https://hub.docker.com/search?type=image there are thousands of containers ready to configure. Whenever possible, choose containers from trusted publishers or with many downloads and current.
    • We chose the Jellyfin container as an example. In the search engine many results appear, we choose the one for linuxserver. https://hub.docker.com/r/linuxserver/jellyfin
    • We find the docker-compose stack and copy it to a text file. In this case:

    Note: Verify on the official page that this stack has not changed before installing it.

    7. Customize the stack.

    • It is always a good idea to read the editor's comments to familiarize yourself with the options and to verify that the container is valid for our architecture.
    • We customize our stack to suit our system. In this example, we remove all optional lines and keep the essentials. We assume as an example that within /DATA we have the "media" folder that contains other subfolders with movies, photos, etc.
    • We adjust the stack as follows:

    • Comment 1: See point 5.
    • Comment 2: Adjust it to your location. You can see it by typing cat/etc/timezone in a terminal.
    • Comment 3: In the "volumes" section we tell the application where we want it to write and read information. The syntax means that to the left of ":" we define the real path of the disk and to the right is the corresponding folder within the container.
      • Therefore, in the first line we tell the application that the configuration files are written to our SSD in the "config" folder and also another subfolder called "Jellyfin". Defined like this, we will have subfolders for each container with its configuration files inside the config folder. It is not necessary to create the "Jellyfin" folder beforehand, docker can create up to one level of subfolders when the container starts.
      • In the second line we tell the application where the data to be used, movies, etc. are located. Logically we must GIVE PERMISSIONS to the user "userapp" in this folder, or he will not be able to access this information. We can do it from the GUI by editing the user's privileges.
    • Comment 4: In the "ports" section we define the ports for the application to communicate with the system. The syntax is the same as in the previous point, to the left of ":" is the port that we really want to use and to the right is the port that the application uses internally. In this case we have defined the same access port that the application uses internally. If we wanted to change it, for example, to port 8888 we would change the one on the left and it would look like this 8888: 8096
    • At this time it is good practice to save the text file with the docker stack and keep it for future reference.

    8. Deploy the Docker stack.

    • In the OMV GUI in the <<OMV-Extras>> section we go to the "Docker" tab and click on the "Open Portainer" tab.
    • If it is the first time we establish a password for "admin" and enter.
    • Click on the whale icon, then on the left menu click on "stacks", then click on the top button "+ Add stack".
    • We copy the custom stack in the window and above we fill the "name" field by typing "jellyfin". We scroll down the window and look for the "Deploy the stack" button. We press and wait for the stack to be implemented.
    • When the process is finished, we can go to a browser and access the application by typing the IP of our server followed by ":" and the access port defined in the previous point. For example if the IP of our server was we would write

    9. Modification of the stack.

    • We can modify the stack parameters at any time. To do this, click on the name of the stack and then on the "Editor" button at the top.
    • We access the current stack and we can change some parameter and update it by clicking on the "Update the stack" button at the bottom.
    • If we want to delete the application configuration and start from scratch we can do so by previously deleting the /SSD/config/Jellyfin folder. Stop the container first.

    I hope it is useful !!

    The best thanks to the help provided is to report what your solution was. The next one will thank you :thumbup:

    Edited 6 times, last by chente ().

  • Agricola

    Approved the thread.

    Esta guía pretende establecer un método para instalar una aplicación en docker con éxito, evitando problemas de permisos, volúmenes o puertos.

    • Se asume que el usuario ha configurado OMV y su sistema de archivos para datos (en esta guía será la carpeta "DATOS"), y que el acceso SSH está disponible con el usuario root y la contraseña establecida durante la instalación de OMV.


    Docker es una tecnología que permite la creación y uso de contenedores de Linux. Un contenedor es una o más aplicaciones y sus dependencias, agrupadas y aisladas entre sí, que se ejecutan en el mismo kernel del sistema operativo. Docker permite instalar, desinstalar, modificar, actualizar aplicaciones cuantas veces queramos sin causar daños al sistema.

    Para usar Docker, necesitamos definir los siguientes parámetros:

    • Un ESPACIO en nuestro sistema de archivos donde alojar los contenedores. Recomendable un SSD de 60GB o más, independiente de nuestro sistema de archivos de datos. Ganamos rapidez y seguridad. Lo dividimos en dos partes:
      • ARCHIVOS DE PROGRAMA: Se descargan y configuran automáticamente, son "prescindibles", se pueden descargar e instalar fácilmente de nuevo. Es conveniente ubicarlos fuera del disco de sistema de OMV para evitar problemas. Los guardaremos en una carpeta que llamaremos "docker".
      • ARCHIVOS DE CONFIGURACIÓN: Se crean, modifican y personalizan durante el uso de la aplicación. Contraseñas, configuraciones personales, bases de datos, etc. según el caso. Estos archivos son insustituibles, debemos conservarlos si queremos mantener la aplicación en el mismo estado siempre. Los guardaremos en una carpeta que llamaremos "config". Es buena idea hacer backups regulares de esta carpeta.
    • UN USUARIO con el que ejecutar docker. Por seguridad, es conveniente hacerlo así para no otorgar a la aplicación más permisos de los necesarios. En esta guía será "usuarioapp", y debe tener acceso al ESPACIO de docker y a los datos que use la aplicación.


    1. Instalar un disco SSD para Docker. Instalar OMV-Extras.

    2. Crear enlaces simbólicos /SSD y /DATOS

    • En la GUI de OMV vamos a la sección <<Sistema>> luego <<Plugins>> buscamos el plugin "openmediavault-symlinks", lo seleccionamos y pulsamos "+ Instalar" en el menú superior.
    • En la sección <<Almacenamiento>> luego << Sistema de archivos >>, abrimos la columna "Punto de montaje" y nos fijamos en cuál es el punto de montaje del disco SSD.
    • En la sección <<Servicios>> luego <<Symlinks>> pulsamos en "+ Añadir".
    • En la ventana pulsamos en el icono de carpeta a la derecha de "origen", buscamos la ruta de montaje del disco SSD y la seleccionamos. En "Destino" escribimos /SSD y pulsamos salvar.
    • Repetimos el proceso en nuestro sistema de archivos con la carpeta donde tenemos los datos y creamos el enlace simbólico /DATOS

    3. Crear carpetas para los archivos de Docker

    • Abrimos una terminal en putty con el usuario root y tecleamos:

    mkdir /SSD/docker

    mkdir -m 770 /SSD/config

    chgrp users /SSD/config

    4. Cambiar la ubicación de los archivos de PROGRAMA de docker a la carpeta "docker" del SSD. Instalar Docker y Portainer.

    • En la GUI de OMV, ir a la sección <<OMV-Extras>> pulsar en la pestaña "Docker" y en el campo "Almacenamiento de Dockers" sustituir el valor por la ruta de la carpeta "docker". Un symlink no funcionará aquí. Ejemplo: /srv/dev-disk-by-uuid-861acf8c-761a-4b60-9123-3aa98d445f7d/docker
    • Instalar docker: Pulsar en la pestaña "Docker" en el menú superior y pulsar en "Instalar".
    • Instalar Portainer: Pulsar en la pestaña "Portainer" en el menú superior y pulsar en "Instalar".

    5. Crear el usuario "usuarioapp".

    • En la GUI de OMV vamos a la sección <<Permisos de acceso>> luego <<Usuario>> pulsamos en "+ Añadir" y creamos el usuario "usuarioapp", añadiéndolo previamente a los grupos "user" y "docker" en la pestaña "Grupos".
    • Abrimos las columnas UID y GID y tomamos nota de los valores que tiene el usuario "usuarioapp". Ejemplo UID=1002 GID=100 Esto puede variar en tu sistema.

    Ejemplo de instalación:

    6. Escoger una pila

    • En la página https://hub.docker.com/search?type=image hay miles de contenedores listos para configurar. Intentar elegir contenedores de editores de confianza o con muchas descargas y actuales.
    • Elegimos Jellyfin como ejemplo. En el buscador aparecen muchos resultados, elegimos el de linuxserver. https://hub.docker.com/r/linuxserver/jellyfin
    • Buscamos la pila de docker-compose y la copiamos a un archivo de texto. En este caso:

    7. Personalizar la pila.

    • Siempre es conveniente leer los comentarios del editor para familiarizarse con las opciones y comprobar que el contenedor es válido para nuestra arquitectura.
    • Personalizamos nuestra pila para adaptarla a nuestro sistema. En este ejemplo, eliminamos todas las líneas opcionales y nos quedamos con lo esencial.
    • Asumimos como ejemplo que dentro de /DATOS tenemos la carpeta "multimedia" que contiene otras subcarpetas con películas, fotos, etc.
    • Ajustamos la pila de la siguiente manera:

    • Comentario 1: Ver punto 5.
    • Comentario 2: Ajústalo a tu localización. Puedes verla tecleando cat /etc/timezone
    • Comentario 3: En la sección "volumes" le decimos a la aplicación dónde escribir y leer información. La sintaxis significa que a la izquierda de ":" definimos la ruta real del disco y a la derecha está la carpeta correspondiente dentro del contenedor.
      • Por lo tanto, en la primera línea le decimos a la aplicación que los archivos de configuración se escriben en nuestro SSD en la carpeta config y además otra subcarpeta llamada Jellyfin. Definido así, tendremos subcarpetas para cada contenedor con sus archivos de configuración dentro de la carpeta config. No es necesario crear la carpeta "Jellyfin" de antemano, docker puede crear hasta un nivel de subcarpetas cuando se inicia el contenedor.
      • En la segunda línea le decimos a la aplicación dónde están los datos a utilizar, películas, etc. Lógicamente debemos DAR PERMISOS al usuario "userapp" en esta carpeta, o no podrá acceder a esta información. Podemos hacerlo desde la GUI editando los privilegios del usuario.
    • Comentario 4: En la sección "ports" definimos los puertos para que la aplicación se comunique con el sistema. La sintaxis es la misma que en el punto anterior, a la izquierda de ":" está el puerto que queremos usar y a la derecha está el puerto que la aplicación usa internamente. En este caso es el mismo puerto que usa la aplicación internamente. Si quisiéramos cambiarlo, por ejemplo, al puerto 8888 cambiaríamos el de la izquierda y quedaría así 8888: 8096
    • Este es un buen momento para guardar el archivo de texto con la pila de docker y conservarlo para futuras referencias.

    8. Implementar la pila de Docker

    • En la GUI de OMV en la sección <<OMV-Extras>> vamos a la pestaña "Docker" y pulsamos en la pestaña "Abrir Portainer".
    • Si es la primera vez establecemos una contraseña para "admin" e ingresamos.
    • Pulsamos en el icono de la ballena, luego en el menú de la izquierda pulsar en "stacks", luego pulsar en el botón superior "+ Add stack".
    • Copiamos la pila personalizada en la ventana y arriba llenamos el campo "name" escribiendo "jellyfin". Nos desplazamos en la ventana hacia abajo y buscamos el botón "Deploy the stack". Pulsamos y esperamos a que se implemente la pila.
    • Cuando termine el proceso ya podemos ir a un navegador y acceder a la aplicación escribiendo la IP de nuestro servidor seguida de ":" y el puerto de acceso definido en el punto anterior. Por ejemplo si la IP de nuestro servidor fuera escribiríamos

    9. Modificación de la pila.

    • Podemos modificar los parámetros de la pila en cualquier momento. Para ello pulsamos sobre el nombre de la pila y luego en el botón "Editor" en la parte superior.
    • Accedemos a la pila actual y podremos cambiar algún parámetro y actualizarla pulsando en el botón "Update the stack" en la parte inferior.
    • Si queremos eliminar la configuración de la aplicación y empezar de cero podemos hacerlo eliminando previamente la carpeta /SSD/config/Jellyfin. Detener antes el contenedor.

    Espero que sea útil !!

    The best thanks to the help provided is to report what your solution was. The next one will thank you :thumbup:

    Edited 4 times, last by chente ().

  • chente

    Changed the title of the thread from “[How to] Prepare OMV to install docker applications (beginners)” to “[How to] Prepare OMV to install docker applications”.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!