Docker is a technology that enables the creation and use of Linux containers. A container is an isolated environment where one or more applications and their dependencies run using the same operating system kernel.
Docker allows applications to be installed, removed, modified, and updated without directly affecting the base system.
The openmediavault-compose plugin provides an interface in the OpenMediaVault GUI to create and manage containers using docker compose.
With this plugin:
This document assumes that Docker and the required dependencies are already installed and properly configured.
The document Docker in OMV 8 describes the recommended method to install and configure Docker on OpenMediaVault.
It is strongly recommended to read and follow that document before installing or using the openmediavault-compose plugin.
Go to → Docker in OMV 8
The installation and initial configuration of Docker and the openmediavault-compose plugin are covered in the document Docker in OMV 8 and will not be repeated here.
| Warning | |
|
The openmediavault-sharerootfs plugin is a dependency of openmediavault-compose. Do not uninstall the openmediavault-sharerootfs plugin while openmediavault-compose is installed. Removing it will cause the openmediavault-compose plugin to be automatically uninstalled. | |
This tab contains the general configuration options of the openmediavault-compose plugin.
From here, you can define the folders used by the plugin, configure backup behavior, and manage Docker-related settings.
Go to → Services > Compose > Settings
Changes made in this tab are applied using the Save button.
Define the folder where the plugin will store container configuration files, including Docker Compose files (.yaml) and environment files (.env).
Define a shared folder used as a global data path.
Configure the plugin's schedulable backup system.
.yaml and .env) :ro) in the compose files # BACKUP at the end of a volume line in a compose file to force inclusion in the backup. # SKIP_BACKUP at the end of a volume line to exclude it from the backup. Configure Docker-specific settings used by the plugin.
| Note | |
|
NVIDIA Containers If using NVIDIA drivers inside containers (e.g., Plex or Jellyfin hardware transcoding), leave this field empty. Changing the storage path in this case can corrupt the NVIDIA configuration during OMV reconfiguration. | |
Adjust plugin behavior for advanced use or debugging.
Configure caching behavior of the plugin’s GUI to improve performance.
From left to right:
The Files tab is the compose file management interface of the openmediavault-compose plugin.
From this tab you can create, edit, delete and manage Docker Compose configuration files (.yaml) and environment files (.env) used to deploy and control containers.
All files created or imported here are stored in subfolders inside the shared folder defined in Settings → Compose Files.
Actions performed in this tab apply to all containers defined in the selected compose file.
The + button groups all actions related to creating or importing compose files.
Creates a new Docker Compose file from scratch.
.env)..yaml and .env files.
Create compose files from predefined examples included with the plugin.
| Note | |
| One of the available examples creates a Composerize container, which can generate compose files from Docker CLI container commands. | |
Create a compose configuration by downloading a file from a remote URL.
Only trusted sources should be used.
Generate compose files from existing containers that were created outside the plugin.
Use this feature only when necessary. The generated files are usually larger and less clean than manually written compose files.
Useful when the original compose configuration has been lost.
.yaml and .env files.Import existing compose configurations into the plugin.
Imports a single Docker Compose file. Useful when testing or migrating an individual compose file without importing a full directory.
Reloads the compose file from disk and synchronizes external changes with the plugin state. This is useful when the file has been modified outside the GUI (for example via CLI, git pull or an external editor).
Edit the .yaml and .env files of the selected configuration.
The editor window is identical to the Create dialog.
Delete the selected compose configuration.
Validate the syntax of the selected compose file.
Recommended before starting containers.
Displays the current status of containers associated with the selected compose file.
Start all containers defined in the selected compose file.
Stop all containers defined in the selected compose file.
Useful for troubleshooting or inspecting container output.
Stop and remove all containers defined in the selected compose file.
Download the latest available images for the selected compose file.
Define global environment variables available to all compose files.
Example variable definition:
MYPUID=1000
Usage inside a compose file:
- PUID=${MYPUID}
Docker will substitute the value when the container starts:
- PUID=1000
These variables are available to all compose files managed by the plugin.
The Prune button groups several cleanup actions into a submenu.
Performs all prune actions at once.
Removes stopped containers.
Removes unused container images.
Removes unused Docker networks.
Removes unused Docker volumes.
Displays container logs.
Shows container logs in real time.
Downloads container logs to a file.
Builds images defined in the compose file.
Pulls images and then builds them.
Starts containers and removes orphan containers not defined in the compose file.
Stops containers and removes orphan containers.
Stops and removes all containers managed by the plugin, regardless of compose file. This is an advanced operation and should be used with caution.
Initializes a git repository in the compose files directory.
Shows changes made to compose files compared to the git repository state.
Shows changes made to the global environment file.
The Docs menu provides quick access to documentation.
Opens this documentation.
Open the Docker in OMV document on this wiki.
The Configs tab allows you to manage Docker configs used by compose files.
Docker configs are external configuration files managed by Docker and mounted into containers at runtime.
They are typically used to provide application configuration files (for example: nginx.conf, app.conf, config.json) without embedding them directly inside the compose file.
This tab is intended for advanced users and is optional for most container deployments.
configs: directive.The “+” button groups all actions related to creating or importing Docker configs.
Creates a new Docker config file.
The dialog contains the following fields:
nginx.confImports an existing configuration file as a Docker config.
Useful when migrating from an existing setup or when the configuration file already exists on disk.
Edit the contents of the selected config file.
Delete the selected config file.
Displays changes made to config files.
This is particularly useful when working with git integration or when tracking manual edits to configuration files.
Docker configs managed in this tab can be referenced inside compose files using the standard Docker Compose syntax.
This allows configuration files to be mounted into containers at runtime without hardcoding their contents directly in the compose file.
This functionality is recommended only for users familiar with Docker Compose and container configuration management.
The Services tab displays services generated by Docker containers managed by the openmediavault-compose plugin.
Each entry represents a service exposed by a container, typically corresponding to an application or web interface.
The Ports column shows clickable links that allow direct access to the web interface provided by each service.
Selecting a service enables the action buttons in the top toolbar.
Downloads the latest available image for the container associated with the selected service.
This does not restart or recreate the container automatically.
Recreates and starts the service using the currently available image.
Typically used after pulling a newer image.
Stops the container providing the selected service.
Stops and removes the container providing the selected service.
The container can later be recreated using the Up action.
Restarts the container providing the selected service without removing it.
Useful for applying configuration changes that do not require container recreation.
Displays detailed Docker inspection information for the container providing the selected service.
Includes configuration, mounts, network settings and runtime status.
Displays the log output of the selected service up to the moment the action is executed.
Displays the log output of the selected service in real time.
New log entries will continue to appear as they are generated.
Downloads the log output of the selected service to a file.
Useful for offline analysis or for sharing logs when requesting support.
The Stats tab displays a list of running containers along with real-time information about resource usage.
This includes CPU, memory, network and disk I/O statistics provided by Docker.
Selecting a container enables the action buttons in the top toolbar.
Displays detailed information about the selected container using Docker inspect.
Includes configuration, mounts, network settings, environment variables and runtime state.
Activated when selecting a container.
Displays the log output of the selected container up to the moment the action is executed.
Activated when selecting a container.
Displays the log output of the selected container in real time.
New log entries will continue to appear as they are generated.
Activated when selecting a container.
Restarts the selected container.
Useful to quickly apply changes or recover from temporary issues without recreating the container.
Activated when selecting a container.
Downloads the log output of the selected container to a file.
Useful for offline analysis or when attaching logs to a support request.
Activated when selecting a container.
Shows existing images on the system and allows you to manage them.
Selecting an image activates the action buttons on the top bar.
Deletes the selected image if it is not currently in use. If the image is in use, an error is returned and the image is not removed.
Displays detailed information about the selected image.
Downloads the latest version of the selected image from the configured repository.
Downloads a specific tagged version of the selected image from the repository.
Assigns a new tag to the selected image. Useful for versioning or preparing to push the image to a repository.
Uploads the selected image to a remote Docker repository using its assigned tag.
Cleans up unused images from the system. Removes images that are not currently used by any container to free disk space.
Shows existing networks on the system and allows you to manage them.
Selecting a network activates the action buttons on the top bar.
Opens a dialog to create a custom network interface.
Comma separate multiple entries (e.g., `my-router=192.168.10.5,my-nas=192.168.20.6`).
Deletes the selected network interface.
Displays detailed information about the selected network interface.
Shows existing volumes on the system and allows you to manage them.
Selecting a volume activates the action buttons on the top bar.
Deletes the selected volume.
Displays detailed information about the selected volume.
Shows a list of running containers displaying basic execution data.
Selecting a container activates the action buttons on the top bar.
Actions in this tab apply only to the selected container, even if the yaml file defines multiple containers.
The Ports column provides links to access the GUI of each container via its port and the server’s domain. Ensure your router/DNS system allows proper resolution of these domain names.
Restarts the selected container.
Activated when selecting a container.
Displays detailed information about the selected container.
Activated when selecting a container.
Displays the logs of the selected container up to this point.
Activated when selecting a container.
Shows continuous logs of the selected container in real time.
Activated when selecting a container.
Downloads the log file of the selected container to the local system.
Activated when selecting a container.
This is the Dockerfiles management tab for creating container images.
From this tab you can create, edit, delete, build, and manage Dockerfiles.
All files generated here are stored in subfolders inside the shared folder defined in Settings → Compose Files.
Selecting a Dockerfile activates the action buttons on the top bar.
Creates a new Dockerfile to generate a container image.
Allows editing the selected Dockerfile, script, and conf files.
Activated when selecting a Dockerfile.
Deletes the selected Dockerfile.
Also removes the corresponding subfolder and all related files.
Activated when selecting a Dockerfile.
Builds the image using the selected Dockerfile.
Activated when selecting a Dockerfile.
Builds the image like Build, but always pulls the base image from the internet even if it exists locally.
Activated when selecting a Dockerfile.
Allows tagging the selected image with a custom name.
Activated when selecting a Dockerfile.
This tab manages the utility that allows you to perform plugin backups and/or container image updates. It displays a list of scheduled jobs.
By default, backups include all subfolders containing generated compose files. These subfolders are created automatically every time a compose file is generated via the GUI.
Additionally, volumes defined in each container that are smaller than 1GB will be included in the backup. This threshold can be customized in the Settings Tab.
You can manually include or exclude volumes:
# BACKUP at the end of the volume definition. Volumes under 1GB (or the custom threshold) are included automatically.:ro will never be included.# SKIP_BACKUP at the end of the volume definition. Volumes above the threshold are excluded automatically if not marked.Backup process:
Update process:
| Note | |
| The advantage of the plugin's backup utility is that it stops containers before performing the backup, ensuring consistency. Afterward, you can use any specialized backup solution for versioning, deduplication, etc. Running backups while containers are active may produce inconsistent results. | |
asd*, *asd*, *asd* to include all compose files.Defines the type of action performed by the scheduled job.
(Available when Maintenance is selected)
docker image prune -fAllows execution of custom scripts before and/or after the maintenance task.
Defines when and how the task is executed.
At the bottom of the dialog:
(Available when Container state is selected as the Action Type)
This mode allows you to schedule automatic start or stop actions for containers defined in compose files.
Unlike maintenance tasks, this mode does not perform backups, updates, or image operations. It only controls the execution state of containers.
The Filter field in the Settings section applies exactly the same way as in maintenance mode.
Opens the edit dialog for the selected scheduled task.
Deletes the selected scheduled task.
Executes the selected task immediately. Email notifications are not sent in this mode.
This tab allows you to restore backups previously created by the plugin backup utility.
Backups listed here are those generated from the Schedule tab and stored in the configured backup folder.
Selecting a backup activates the action buttons.
Restores the selected backup.
The restore process performs the following actions:
global.env file if it exists in the backup.
Restores only the global environment variables file (global.env) from the selected backup.
This option is useful when:
No containers are stopped or restarted when using this option.
Deletes the selected backup from disk.
This action is permanent and cannot be undone.
| Warning | |
|
Restoring a backup will overwrite existing compose files and data. Make sure current configurations are no longer needed or have been backed up separately before proceeding. | |
This tab allows you to manage access to container image repositories.
The buttons available are:
| Note | |
| The authentication status affects the ability to pull or push images from/to private repositories. | |
The dashboard provides several widgets that display the current status of Docker and running containers.
These widgets are informational only and do not allow direct interaction.
Shows the global Docker service status.
This widget provides a quick visual confirmation of Docker availability.
Displays Docker service status in table format.
This widget offers the same information as the grid view but in a more compact, list-based format.
Shows a list of currently running containers.
For each running container, the following information is displayed:
Stopped containers are not displayed in this table.
This widget allows quick monitoring of active containers without entering the Compose interface.
This is useful if you need a container to have an IP within your LAN that is different from your server's.
The most common use case for this procedure is installing pi-hole in docker on an OMV server. The reason in this case is that both pi-hole and OMV need the same port to function correctly, port 53. Therefore we need pi-hole to use a different IP on our network to be able to use that port without affecting OMV. There may be other use cases besides pi-hole, depending on the needs of the container you're setting up.
Note that containers using this network will expose all their ports on the LAN, just like any other IP, eg OMV. Docker provides an additional layer of security through port mapping (similar to a firewall). Through this procedure we lose that additional security layer. This does not have to be a problem, it is normal operation in any network, but it is convenient to be aware of this circumstance. Logically it will be useless to map ports in those containers, so you can save that part.
We must create the network previously to be able to define the parameters we need and use it later in the containers. We will call it mynet and we will create it as follows:
192.168.1.0/24 Adapt it to your network.192.168.1.1 Adapt it to your network.192.168.1.240/29 Adapt it to your network.192.168.1.241 to 192.168.1.246 This will allow us to assign IP addresses up to 6 containers, you can expand it if you need more. Any such website can help with this: IP calculatorhost=192.168.1.247In order for a container to use the created network interface you need to add the following lines to the end of your compose file, assuming docker-compose is version 3 or higher. See the documentation for older versions of docker-compose.
services:
pi-hole:
container_name: "pi-hole"
.
.
networks:
mynet:
ipv4_address: 192.168.1.241
networks:
mynet:
external: true
This sets up the mynet interface for that container and assigns it the IP value 192.168.1.241 within our network, which was the first available. We will still be able to use up to 246 in other containers.
When we start the container we will be able to access its interface from the assigned IP and the usual port.
Once the above is done, in order to avoid overlapping assignable IP ranges, it would be advisable to reduce the IP range of the network's DHCP server. In the case of the previous configuration it could be set to:
This way addresses from 192.168.1.240 onwards will always be available, since the router will not assign any of these IPs if a device requests an IP assignment.
If you use the container itself as a DHCP server, for example with pi-hole, you must disable the DHCP server on your router and adapt the DHCP range in pi-hole accordingly.
What has been applied so far is enough to use pihole, but in the case of other different containers it may be necessary for the container and the host to communicate with each other. Vlans have a limitation, by design they cannot communicate with the host. To overcome this setback and allow communication between the containers and the host, if necessary, we can create a network interface that will act as a bridge between the two.
| Warning | |
|
What follows from now on is a procedure that creates a binding interface for communication with the host via /etc/network/interfaces when OMV uses netplan. This can generate some conflict in certain circumstances. Do it at your own risk. If you have a suggestion to do this in a safe way you can post it in the forum. | |
Running the following commands would create this interface, but this configuration would not be persistent in OMV. On the first server restart it would disappear:
ip link add mynet-host link eno1 type macvlan mode bridge
ip addr add 192.168.1.239/32 dev mynet-host
ip link set mynet-host up
ip route add 192.168.1.224/28 dev mynet-host
This would create a macvlan network interface called mynet-host in bridge mode that would use the IP 192.168.1.239. The host would use this network interface thanks to the static route set in the 192.168.1.224/28 network range to communicate with the containers.
To make this configuration persistent in OMV we must do it as follows:
nano /etc/network/interfaces.d/99-mynet-host
auto mynet-host
iface mynet-host inet static
pre-up ip link add mynet-host link eno1 type macvlan mode bridge
address 192.168.1.239/32
up ip link set mynet-host up
up ip route add 192.168.1.224/28 dev mynet-host
eno1 with your network interface. You can see it in the GUI under Network > Interfaces.Ctrl+X and YesFrom now on those settings will be set every time the server is started.
| Note | |
| If for some reason you need to create many different IPs keep in mind that macvlan uses different MAC addresses for each IP. This can be a problem if your hardware has a limit on the maximum number of MACs for the same physical interface. In that case you can change the configuration to ipvlan. Consult the official docker documentation in this regard to solve other possible configuration problems with ipvlan. | |
We, who support the openmediavault project, hope you’ve found this guide to be useful and that you’ll find your openmediavault server to be efficient, easy to use, and enjoyable.
If you found this plugin guide to be helpful, please consider a modest donation to support the hosting costs of this server.
OMV-Extras.org