Skip to main content
  1. Tutorials/

Docker Compose on Unraid with Compose Manager Plus

Difficulty Beginner
Time ~30 min
Stack
Unraid Docker

The Unraid app store is great for getting a single container running quickly, but it does not scale well. Docker Compose (a tool for defining and running multi-container applications using a single configuration file) gives you a repeatable, readable, and version-controllable way to manage your containers. This tutorial walks you through setting it up on Unraid from scratch.

Executive Summary
#

By the end of this tutorial you will have the Compose Manager Plus plugin installed in Unraid, a directory structure for organizing your stacks, and a working example compose file that uses environment variables to keep sensitive values out of your config. You will also know how to start, stop, and update stacks from both the terminal and the Unraid UI.


Prerequisites
#

ComponentRequirement
Unraid OS6.10 or later
DockerEnabled in Unraid Settings
Community ApplicationsInstalled (see Installing and Managing Apps in Unraid)
core_net networkCreated (see Configuring Docker Networks in Unraid)
SSH accessRecommended (see Setting Up SSH and SSL in Unraid)

Implementation
#

Step 1: Understand what Docker Compose is
#

Before installing anything, it helps to understand the problem Docker Compose solves.

When you launch a container from the Unraid UI, Unraid stores the settings internally as a template. This works fine for a single container, but it has drawbacks. Templates are difficult to back up, hard to share, and require clicking through a UI every time you want to make a change. There is also no easy way to define how multiple containers relate to each other.

Docker Compose solves this by letting you describe your containers in a plain text file called docker-compose.yml. A YAML (Yet Another Markup Language, a human-readable text format for structured data) file defines everything about your container in one place: the image to use, environment variables, ports, volumes, and which network it belongs to. You can store this file anywhere, back it up, and recreate your entire stack from scratch with a single command.

Step 2: Install Compose Manager Plus
#

Compose Manager Plus is a plugin that adds a Compose section directly to the Unraid Docker tab so you can manage your stacks from the UI without needing the terminal every time.

Why Compose Manager Plus and not Compose Manager? The original Compose Manager plugin by dcflachs has been deprecated and will no longer receive updates or support. Compose Manager Plus by mstrhakr is the official drop-in replacement and continuation of that project. If you search online for Docker Compose on Unraid you will find many older guides referencing the original plugin. Use Compose Manager Plus instead. You can read the deprecation notice on the original plugin’s Unraid forum thread and find the Compose Manager Plus source and documentation on GitHub.

  1. In the Unraid web UI, click Apps in the top navigation bar.
  2. In the search bar, type Compose Manager Plus.
  3. You will see two results: the stable release and a beta release marked with an orange BETA badge. Click Install on the stable release by mstrhakr.

Compose Manager Plus search results
Community Applications showing two Compose Manager Plus results. Always install the stable release on the left, not the beta.

  1. The install progress screen will appear showing the download and package installation. Wait for it to complete.

Compose Manager Plus install in progress
The install progress screen showing the plugin downloading and being verified. This takes about 30 seconds.

  1. When the screen shows Install Plugin - Finished and a Done button, click Done.

Compose Manager Plus install finished
A successful install ends with “Plugin installed” and the version number confirmed at the bottom of the log.

After install, open the Plugins tab to confirm Compose Manager Plus appears in the installed plugins list. Then click Docker in the top navigation bar. You will now see a Compose section at the bottom of the Docker tab with an Add New Stack button.

Plugins tab with Compose Manager Plus installed
The Plugins tab confirming Compose Manager Plus is installed and up to date alongside your other plugins.

Docker tab with Compose section
The Docker tab after install. The Compose section appears at the bottom with no stacks yet. This is where all your stacks will be managed.

Step 3: Create your stack directory
#

All compose stacks live under /mnt/user/compose/ on your Unraid server. Each stack gets its own subdirectory. Compose Manager Plus will store and edit the compose and .env files through its UI, but the directory itself needs to exist first.

Open a terminal via SSH and run:

mkdir -p /mnt/user/compose/example
ls /mnt/user/compose

Terminal showing mkdir and ls output
The terminal confirms the example directory was created under /mnt/user/compose/.

As you add more stacks later you will create additional subdirectories alongside it, for example /mnt/user/compose/media or /mnt/user/compose/security.

Step 4: Understand the compose file structure
#

A docker-compose.yml file has a predictable structure. Here is a minimal example with the key sections labeled:

services:           # defines the containers in this stack
  my-container:     # this is the service name (used internally by Compose)
    image: some-image:latest    # the Docker image to pull
    container_name: my-container  # the name Docker gives the running container
    restart: unless-stopped     # restart automatically unless you stop it manually
    environment:                # environment variables passed into the container
      - MY_VARIABLE=my-value
    ports:                      # maps host ports to container ports (host:container)
      - "8080:80"
    volumes:                    # maps host directories into the container
      - /mnt/user/appdata/my-container:/data
    networks:                   # which Docker networks this container joins
      - core_net

networks:           # declares the networks used by services in this file
  core_net:
    external: true  # tells Compose this network already exists, do not create it

Each section is optional depending on what your container needs, but image and container_name are almost always present.

Step 5: Understand environment variables and the .env file
#

Hardcoding sensitive values like passwords and API keys directly into a compose file is a bad habit. If you ever share the file or commit it to a Git repository (a version control system for tracking changes to files), those values are exposed.

The solution is a .env file (a plain text file that stores key-value pairs used as variables). Docker Compose automatically reads a .env file in the same directory as your docker-compose.yml and substitutes the values into your config at runtime.

For example, instead of writing:

environment:
  - DB_PASSWORD=mysecretpassword

You write:

environment:
  - DB_PASSWORD=${DB_PASSWORD}

And in your .env file:

DB_PASSWORD=mysecretpassword

The compose file stays safe to share. The .env file stays private.

Step 6: Add the stack to Compose Manager Plus
#

Now that the directory exists, add it to Compose Manager Plus so you can edit the compose and .env files from the UI.

  1. In the Unraid web UI, click the Docker tab.
  2. Scroll down to the Compose section and click Add New Stack.

Add New Compose Stack dialog
The Add New Compose Stack dialog. Stack Name is required. Description is optional but useful when you have many stacks.

  1. In the Stack Name field, type example - whoami.
  2. Add a description like whoami container example.
  3. Click Advanced Options to expand the section. You will see an Indirect Path field. As you start typing /mnt/user/compose/ a file browser will appear showing your directory structure. Select example or finish typing the full path /mnt/user/compose/example/.

Add New Stack dialog with file browser showing example directory
The file browser appears as you type the path. Select your stack directory from the tree.

Add New Stack dialog completed
The completed dialog with stack name, description, and Indirect Path all filled in. The Create button is now active.

  1. Click Create.

After clicking Create, the stack editor opens automatically. You will see four tabs: Compose, .ENV, WebUI Labels, and Settings.

Stack editor open on Compose tab, empty
The stack editor opens to the Compose tab with a blank file ready to edit. The status bar at the bottom shows “YAML syntax is valid”.

Step 7: Add the WebUI address
#

Before writing the compose file, set the WebUI URL so Unraid knows how to link to your container. Click the Settings tab.

Stack editor Settings tab
The Settings tab shows Stack Identity, Appearance, and Stack WebUI sections. The WebUI URL field accepts [IP] and [PORT] as dynamic placeholders.

Stack editor Settings tab scrolled down
Scrolling down reveals the Advanced section showing the External Compose Path confirming your stack directory.

In the Stack WebUI section, set the WebUI URL field to:

http://[IP]:[PORT]:8088

The [IP] and [PORT] placeholders are automatically replaced with your server’s IP and the container’s mapped port at runtime.

Step 8: Write the compose file
#

Click back to the Compose tab. Clear any placeholder content and paste the following:

services:
  whoami:
    image: traefik/whoami:latest
    container_name: whoami
    restart: unless-stopped
    ports:
      - "${HOST_IP}:${WHOAMI_PORT:-8088}:80"
    networks:
      - core_net

networks:
  core_net:
    external: true

Stack editor Compose tab with whoami compose file pasted in
The compose file pasted in with syntax highlighting. The status bar confirms “YAML syntax is valid” and the Save All button shows 1 unsaved change.

Step 9: Add the .env file and save
#

Click the .ENV tab. You will see an empty editor showing 0 environment variable(s). Paste the following:

TZ=America/Phoenix
HOST_IP=YOUR_UNRAID_IP
WHOAMI_PORT=8088

Replace YOUR_UNRAID_IP with your Unraid server’s local IP address and America/Phoenix with your timezone (a full list is available at en.wikipedia.org/wiki/List_of_tz_database_time_zones).

.ENV tab with placeholder IP
The .ENV tab with the three variables entered. Replace YOUR_UNRAID_IP with your actual server IP before saving.

.ENV tab with real IP filled in
After replacing the placeholder with your real IP. The editor shows 3 environment variables and Save All (2) is active indicating both files have unsaved changes.

Click Save All to save both the compose file and the .env file at once.

Saved confirmation dialog
The “Saved! All changes have been saved.” confirmation appears briefly after clicking Save All.

Step 10: Start the stack and verify
#

Close the editor. Back on the Docker tab you will see the stack listed in the Compose section with a status of stopped. Click the stack row icon to open the context menu and select Pull & Up. This pulls the latest image and starts the container in one step.

Stack context menu showing Pull and Up options
The context menu for a stopped stack. Pull & Up is the recommended option for a first start as it ensures you have the latest image.

A confirmation dialog will appear. Click Update to proceed.

Pull and Up confirmation dialog
The confirmation warns that running containers will be recreated with the latest images. Click Update to confirm.

The progress terminal will open showing the image being pulled and the container being created.

Update progress showing image pulling
The progress terminal shows each layer of the image being downloaded.

Update progress showing container created successfully
“Stack example_-_whoami updated successfully” confirms the container is running. Click Done to close.

Click Done. The Docker tab will now show the whoami container in the Docker Containers section with a status of started, and the Compose section will show 1/1 containers running.

Docker tab with whoami running
The Docker tab after the stack starts. The whoami container appears in the Docker Containers section showing its network, IP, and port. The Compose section shows 1/1 containers and “up-to-date”.

To verify the container is working, click the container row icon in the Docker Containers section and select Logs.

Container log showing whoami started on port 80
The container log confirms whoami started successfully and is listening on port 80.

You can also open a browser and go to http://YOUR_UNRAID_IP:8088. Whoami is not a traditional web application. It responds to any HTTP request with plain text showing the hostname, IP addresses, and request headers it received. This output confirms the container is reachable and networking is working correctly.

Whoami browser response showing hostname, IPs, and request headers
The Whoami response in the browser. The hostname, container IP on core_net (172.18.0.2), and full HTTP request headers confirm the container is up and accessible on the network.

To set the stack to start automatically on boot, toggle the Autostart switch on the stack row in the Compose section.

Step 11: Manage a running stack
#

Once a stack is running, right-clicking its row shows a different set of options:

Running stack context menu
The context menu for a running stack includes Compose Down, Compose Stop, Compose Restart, Force Update, and more.

OptionWhat it does
Compose DownStops and removes containers (images and volumes are kept)
Compose StopStops containers without removing them
Compose RestartRestarts all containers in the stack
Force UpdatePulls latest images and recreates containers
Edit StackOpens the compose/env editor
View LogsOpens the stack log viewer

Lab Notes & Troubleshooting
#

“compose” is not a docker command. You have an older version of Docker that uses docker-compose (with a hyphen) instead of docker compose (with a space). Unraid 6.10 and later ships with the newer syntax. Update Unraid if you see this error.

Container starts then immediately stops. Check the logs with docker logs CONTAINER_NAME. The most common cause is a missing or incorrect environment variable.

Port is already in use. Another container or service is using that port. Change the host port in your .env file (the number on the left side of the colon in the ports mapping).

Changes to the .env file are not taking effect. Run docker compose up -d again from the stack directory. Compose re-reads the .env file every time it starts containers.

Compose Manager Plus does not show my stack. Confirm the Indirect Path you entered points to the directory containing docker-compose.yml, not to the file itself.

The core_net network is missing after a reboot. Make sure the core stack is set to Autostart in Compose Manager Plus and that it starts before other stacks. Compose Manager Plus starts stacks in the order they are listed.


Summary
#

You now have Docker Compose set up on Unraid with Compose Manager Plus installed, a clean directory structure under /mnt/user/compose/, a core infrastructure stack that ensures core_net exists on boot, and a working example stack that demonstrates how compose files and .env files work together. Every container you deploy going forward will follow this same pattern.

Next Step: Deploying MariaDB on Unraid


Disclaimer: Content on this site is provided as-is with no guarantees of accuracy, completeness, or fitness for any particular purpose. Always test in a safe, non-production environment before applying anything documented here to systems you rely on. I am not responsible for data loss, damage, or security issues resulting from following these guides. Software and services change over time and steps that worked when this was written may not work in the future.