Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Plugin] Docker Compose Manager

Featured Replies

On 6/5/2025 at 1:45 PM, primeval_god said:

Never tried such a thing but this is not a function of the compose plugin ui. The snippet you show above is the Dockerman ui which is built into unraid.

Thanks for the reply. Is there a location for submitting issues for built in unraid features like this (similar to the community plugin stuff)?

  • Replies 872
  • Views 326.5k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • I've been playing with the code behind this plugin and have made a couple of tweaks.  I'd be interested on peoples thoughts and suggestions.   The first allows you to specify any .env file. 

  • I've recently started using Compose Manger to orchestrate my containers in Unraid. I've used docker-compose for a long time on old servers, but moved away from it when I started using Unraid, as I pre

  • In the recent update, orphaned image is now automatically removed. Thank you.   Is it possible to also update the local sha256 hash in this file /var/lib/docker/unraid-update-status.json? Si

Posted Images

Hi

Thanks for the plugin. It is very useful. I prefer it to community apps for complex dockers that need multiple containers talking to each other.

I am having some trouble with the icons.

Does the compose file support labels, eg:

labels:

io.unraid.docker.icon: https://.../icon.png

net.unraid.docker.icon: https://.../icon.png

io.unraid.docker.webui: ip address

Even when I put the images in the UI Labels part I am not seeing any icons.

Thanks for any help.



  • Author
3 hours ago, kiwijunglist said:

Hi

Thanks for the plugin. It is very useful. I prefer it to community apps for complex dockers that need multiple containers talking to each other.

I am having some trouble with the icons.

Does the compose file support labels, eg:

labels:

io.unraid.docker.icon: https://.../icon.png

net.unraid.docker.icon: https://.../icon.png

io.unraid.docker.webui: ip address

Even when I put the images in the UI Labels part I am not seeing any icons.

Thanks for any help.



      net.unraid.docker.icon: 'https://github.com/0neTX/UnRAID_Template/blob/main/bw-export/icon.png?raw=true'
      net.unraid.docker.webui: ''
      net.unraid.docker.shell: 'sh'

UNRAID supports these labels as hints to the UI as to what to display. All the compose plugin does is provide a UI to allow you to set these labels for the containers in your compose stack the unRAID web ui handles the rest. To my knowledge (I am not running the latest unraid version) unraid still has an issue with its icon caching where changing the icon url set by a label wont actually change the displayed icon short of manually deleting the cached icons (and if i remember correctly no icon still counts as an icon). I believe there is discussion about this issue and how to delete the icon cache somewhere farther back in this thread.

On 5/24/2025 at 5:56 PM, primeval_god said:

I wont have a chance to review it until after the holiday weekend at the earliest.

So have you had time yet to look at this? Its been a good while and you dont reply on github, therefore i ask here

Is it possible for the plugin to detect compose.yml instead of only docker-compose.yml?

  • Author
10 minutes ago, MiguelG said:

Is it possible for the plugin to detect compose.yml instead of only docker-compose.yml?

There is a PR open that would allow this, however I have not had time to evaluate it as of yet. That said this plugin is not designed to manage arbitrary compose stacks, it is designed to manage the simple stacks created via its gui, which always use the same file name.

4 hours ago, primeval_god said:

There is a PR open that would allow this, however I have not had time to evaluate it as of yet. That said this plugin is not designed to manage arbitrary compose stacks, it is designed to manage the simple stacks created via its gui, which always use the same file name.

Thank you,

I have a bunch of stacks already and I think it would be nice to support both, I use dockge, code server and sometimes the cli, this would also be a great option

I'm hoping some of you docker experts can help me out with a docker compose manager issue I'm having.

I have compose setting up a perforce server on Unraid. It gets through the building steps, but seems to have an issue finding the files I've added. I have the Entrypoint set to run a run.sh script, but the container can't find it.

All of the files I'm added sit in the root folder along with the Dockerfile and docker-compose.yml files that are in my /appdata/perforce-server folder.

The error I get is:
exec /run.sh: no such file or directory

and I have no idea why the run.sh script is not ending up where it should be.

Here is the full Dockerfile:

# Use Ubuntu 24.04 (Noble Numbat) as the base image
ARG P4_BASEIMAGE=ubuntu:24.04
FROM $P4_BASEIMAGE AS perforce-base
MAINTAINER Van
ENV container docker
# Install required system dependencies, including gnupg for handling GPG keys
RUN apt-get update && apt-get install -y \
    cron \
    tar \
    gzip \
    curl \
    openssl \
    sudo \
    debianutils \
    gnupg2 \
    lsb-release && \
    rm -rf /var/lib/apt/lists/*
# Download and install the Perforce GPG key directly into the APT keyring
RUN curl -fsSL https://package.perforce.com/perforce.pubkey | gpg --dearmor -o /usr/share/keyrings/perforce-archive-keyring.gpg
# Add Perforce repository and ensure it's signed with the correct key
RUN echo "deb [signed-by=/usr/share/keyrings/perforce-archive-keyring.gpg] https://package.perforce.com/apt/ubuntu noble release" > /etc/apt/sources.list.d/perforce.list
# Update package lists and install Perforce server and CLI
RUN apt-get update && \
    apt-get install -y p4-server p4-cli && \
    rm -rf /var/lib/apt/lists/*
# Install necessary utilities like gosu, tini, and s6-overlay with updated download links
RUN curl -fsSL https://github.com/tianon/gosu/releases/download/1.17/gosu-amd64 -o /usr/local/bin/gosu \
    && curl -fsSL https://github.com/tianon/gosu/releases/download/1.17/gosu-amd64.asc -o /usr/local/bin/gosu.asc \
    && gpg --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
    && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
    && rm /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true
# ENTRYPOINT ["/init"]
# Make sure the run.sh script is executable
ADD ./run.sh /
RUN chmod +x /run.sh
# Use /run.sh as the entry point to start the container
ENTRYPOINT ["/run.sh"]
FROM perforce-base AS perforce-server
MAINTAINER Van
# Use the same P4_VERSION build argument
ARG P4_VERSION=2025.1
# Install Perforce server and CLI with the version from the build argument
RUN apt-get update && \
    apt-get install -y p4-server p4-cli && \
    rm -rf /var/lib/apt/lists/*
	
EXPOSE 1666
ENV NAME p4depot
ENV P4CONFIG .p4config
ENV DATAVOLUME /data
ENV P4PORT 1666
ENV P4USER p4admin
VOLUME ["$DATAVOLUME"]
ADD ./p4-users.txt /root/
ADD ./p4-groups.txt /root/
ADD ./p4-protect.txt /root/
ADD ./typemap.txt /root/
ADD ./setup-perforce.sh /usr/local/bin/
# Default command to run the server via run.sh or p4d
#CMD ["/run.sh"]

docker-compose.yml

services:
  perforce:
    hostname: perforce
    volumes:
      - /mnt/user/Perforce/:/data
    ports:
      - "1666:1666"
    build:
      context: .
      dockerfile: Dockerfile
    #restart: unless-stopped  # Optional: Restart the container if it stops unexpectedly

Update : I think I solved this specific issue.
The run.sh I was trying to run had windows line endings, so I fixed that by calling"

sed -i 's/\r//' /run.sh 

I was also using a Shebang line that pointed to a directory that didn't exist for my bash, so I just pointed it to /bin/bash instead.

Edited by Snipe3000
Found the fix

  • 3 weeks later...

Does anyone know how to get detailed logs from the dockerfile build process?

  • 2 weeks later...

I have a question that I cannot find an answer to, how do I access the files created by the compose containers? Like the appdata folder for the other containers.

Is there a way to specify that?

EDIT: So I kind of understand that the container created with compose will put the data in the volume specified in the compose file.

One of mine is:

volumes:

- data:/data

now, how do I access data?

Is it possible to just specify the volume on the cache drive for example? When I get to access data and copy the files from it of course.

Edited by Eysenor

1 hour ago, Eysenor said:

- data:/data

You're supposed to adapt the compose file for your environment, e.g in this case you'd change that to be

- /mnt/user/appdata/containername:/data

Hi all,

i really like the plugin, one question about the Autostart.

When is the Autostart triggered? Is did triggered before or after the normal container autostart?


Would it be possible to configure between which containers the compose start?

In general, how is the autostart activated? I set all compose files to autostart but only 1 of 7 really starts

Edit:

Found it out, i need to set the restart parameter in the compose

restart: always

After that it works fine for the containers.

Also after testing, i think the compose container starts at the same time as the normal containers.

Edited by unr41dus3r

  • Author
19 hours ago, unr41dus3r said:

When is the Autostart triggered? Is did triggered before or after the normal container autostart?

Off hand I am not certain. The autostart script triggers on the "STARTED" event, which is an unRAID system event that plugins can hook scripts into. I can never remember where the documentation for those events is.

19 hours ago, unr41dus3r said:

Would it be possible to configure between which containers the compose start?

No. Dockerman autostart and Compose autostart are completely separate. If you have dependencies between containers there are some ways to handle them with docker health checks but in general containers that have dependencies should all be part of the same manager and stack.

19 hours ago, unr41dus3r said:

Found it out, i need to set the restart parameter in the compose

restart: always

After that it works fine for the containers.

I would guess this is because of some dependency between containers that causes the container to fail on initial startup. With restart: always it will continually try and restart after failure until its dependency is ready.

On 7/27/2025 at 1:36 AM, Kilrah said:

You're supposed to adapt the compose file for your environment, e.g in this case you'd change that to be

- /mnt/user/appdata/containername:/data

I should have know that before deploying the container, clearly. But how do I get the data that is now in the "data" folder so that I can remake the containers with the correct mapping?

Edited by Eysenor

  • 2 weeks later...

I apologize if this has been asked before. I tried to use the search and didn't see anything about it.

@primeval_god Have you considered allowing some hook scripts on up or down. For example for my jellyfin container I like to set the transcode directory to a Ramdisk, however after system restart I have to make sure the directory has the right permissions so the container can write to it. I am currently using the user scripts plugin to execute this on array up. But it would be good to just keep everything in one place. I can probably put together a PR for this, but wanted to make sure it was something you would consider before I spent time on it.

I want to process docker-compose with the following yaml:

services:

feishin:

container_name: feishin

image: 'ghcr.io/jeffvli/feishin:latest'

environment:

- SERVER_NAME=navidrome # pre defined server name

- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled

- SERVER_TYPE=navidrome # navidrome also works

- SERVER_URL=https://subdomaon.mydomain.tld:4533 # http://address:port

- PUID=1000

- PGID=1000

- UMASK=002

- TZ=Europe/Berlin

ports:

- 9180:9180

networks:

default:

ipv4_address: 192.168.23.152

networks:

default:

name: bond0

external: true

restart: unless-stopped

I receive this error message:

validating /boot/config/plugins/compose.manager/projects/feishin/docker-compose.yml: (root) Additional property restart is not allowed

Any hints?

6 hours ago, PinkCarlos said:

I want to process docker-compose with the following yaml:

services:

feishin:

container_name: feishin

image: 'ghcr.io/jeffvli/feishin:latest'

environment:

- SERVER_NAME=navidrome # pre defined server name

- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled

- SERVER_TYPE=navidrome # navidrome also works

- SERVER_URL=https://subdomaon.mydomain.tld:4533 # http://address:port

- PUID=1000

- PGID=1000

- UMASK=002

- TZ=Europe/Berlin

ports:

- 9180:9180

networks:

default:

ipv4_address: 192.168.23.152

networks:

default:

name: bond0

external: true

restart: unless-stopped

I receive this error message:

validating /boot/config/plugins/compose.manager/projects/feishin/docker-compose.yml: (root) Additional property restart is not allowed

Any hints?

That's a more of a compose spec question that doesn't have anything to do with this particular plugin. But to help you, you have your restart in the wrong spot, it seems to be with the network config, move it to your service, try putting it below your image setting.

  • Author
On 8/16/2025 at 11:30 PM, dlanor15 said:

I apologize if this has been asked before. I tried to use the search and didn't see anything about it.

@primeval_god Have you considered allowing some hook scripts on up or down. For example for my jellyfin container I like to set the transcode directory to a Ramdisk, however after system restart I have to make sure the directory has the right permissions so the container can write to it. I am currently using the user scripts plugin to execute this on array up. But it would be good to just keep everything in one place. I can probably put together a PR for this, but wanted to make sure it was something you would consider before I spent time on it.

At this time I consider such a feature out of the scope of this plugin. Have you considered using a tmpfs mount for your transcoding directory instead of a Ramdisk?

2 hours ago, primeval_god said:

At this time I consider such a feature out of the scope of this plugin. Have you considered using a tmpfs mount for your transcoding directory instead of a Ramdisk?

You know I actually didn’t consider that. As a non Linux user, I had forgotten that I can do a tmpfs mount. Thank you.

I do have some other use cases where up/down hooks would be nice to have, but those are more like one time setups, so I guess I can live with doing that during initial setup or after disaster recovery.

  • Author
42 minutes ago, dlanor15 said:

I do have some other use cases where up/down hooks would be nice to have, but those are more like one time setups, so I guess I can live with doing that during initial setup or after disaster recovery.

Some containers that have an init system allow you to bind mount additional init scripts into the container that can hook into the up / down sequence. I have also seen setup that run "startup" scripts in a dedicated container that essentially runs the script then sleeps. They use a combination of health checks and container dependences to ensure other containers in the stack dont start until the scripts have finished.

On 8/6/2025 at 4:19 PM, primeval_god said:

I have a follow up question on the topic, I want to change the default volume of a container from the default in the docker-compose file (should have done from the beginning) to a location in the appdata.

the volume is now:

volumes:

- pgdata:/var/lib/postgresql/data

I want to have something like:

volumes:

- mnt/user/appdata/container/pgdata:/var/lib/postgresql/data

I expected that using the docker cp command:

docker cp immich_postgres:pgdata /mnt/user/appdata/container/pgdata

would copy all the content from wherever the default volume is and move it to the new location. Then I could just point the docker-compose to the new location and it should work. But when I do that the container does not work anymore.

Is there a way to do this or is remaking everything from the start the only option?

Thanks!

  • 2 weeks later...
On 6/25/2025 at 8:58 AM, MiguelG said:

Is it possible for the plugin to detect compose.yml instead of only docker-compose.yml?

This would be awesome. Ideally, the plugin should accept any 1 of compose docker-compose with either yml or yaml extensions. I like having everything the same and my 3 other other servers use compose.yaml.

On 6/25/2025 at 9:11 AM, primeval_god said:

There is a PR open that would allow this, however I have not had time to evaluate it as of yet. That said this plugin is not designed to manage arbitrary compose stacks, it is designed to manage the simple stacks created via its gui, which always use the same file name.

Understood, I guess my feature request would just be to have an option for the plugin to choose between the aforementioned options as the standard filename for all simple stacks.

Hey @primeval_god can you provide a rough timeframe when you will have time to look at my PR? Its been open for nearly 5 months and imo fixes/improves and important part of the plugin.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.