Deploy HandbookServer Compass

Home-server app managers keep leaking abstraction at Docker, Compose, TrueNAS app, and Samba boundaries

Updated 2026-06-24

Home-server app managers keep leaking abstraction at Docker, Compose, TrueNAS app, and Samba boundaries

Home-server app managers promise a friendlier interface over Docker, Compose, and storage services — but operators keep hitting the same wall: the UI covers 90% of what you need and leaves the last 10% completely inaccessible.

The abstraction leak problem

Every app manager that sits on top of Docker, Compose, or a NAS app catalog is making a bet: that the fields it exposes in its form or template cover what you will actually need. That bet fails more often than the marketing suggests.

The pattern appears repeatedly across home-server communities. An Unraid user wants to leave XML-style Docker templates behind and move to Portainer and Compose workflows. Reasonable enough — Compose files are portable and readable. The hesitation is not philosophical; it is operational. Will existing container networking survive the migration? Will volumes and bind mounts stay intact? The Unraid template system has opinions baked in, and Portainer has different opinions, and the gap between those opinions is where data loss or broken service discovery happens.

A TrueNAS user running the official Palworld app hits a different version of the same problem. The app form exposes the common Docker configuration fields — image, environment variables, restart policy — but omits the REST API port. That port is not cosmetic; it is how external tooling communicates with the server. The form cannot expose every possible field, so it picks a subset, and whatever falls outside that subset is either inaccessible or requires dropping back to a raw Docker run command that now lives outside the app manager's state tracking.

Samba is the third case. A thread on r/selfhosted asked a straightforward question: should Samba stay on bare metal or move behind a container or a UI like TrueNAS Shares? The native Samba documentation is terse and the configuration format is unforgiving. An app manager or container layer would make it easier to set up — but it adds another abstraction to debug when a share stops mounting, and most NAS UIs still require you to understand the underlying smb.conf semantics to diagnose permission problems.

Where Portainer and Compose fit

Portainer is a solid choice when your goal is visibility and control over existing Docker infrastructure. It does not replace Compose — it wraps it. You can deploy stacks from Compose files directly through the Portainer UI, which means your configuration stays in a format that is readable outside Portainer and can be version-controlled.

The risk when migrating from a template-based system like Unraid is network configuration. Unraid templates often assume the br0 bridge or custom Docker networks that are created as part of the Unraid setup. When you import those workloads into Portainer, the network references may not resolve correctly if Portainer is managing a different Docker daemon context or if the networks were created outside Compose. Before migrating, list your current Docker networks (docker network ls), document which containers use which network, and verify those networks will exist in the target environment before you start the migration.

For new deployments, Compose files give you the cleanest escape hatch. If the app manager ever fails you, the Compose file still works from the command line. Write your stacks in Compose format even when you are managing them through a UI.

TrueNAS app catalog limitations

TrueNAS Scale's app catalog (backed by Helm charts) and TrueNAS Core's plugin system both solve the installation problem. They do not solve the configuration problem for anything non-standard.

The Palworld case is representative: the form exposes what the chart author decided to expose. If you need a field that was not considered — a secondary port, a specific mount path, an environment variable with a non-obvious name — you are stuck. The options are: wait for the chart to be updated, use a community chart instead of the official one, or abandon the app catalog and deploy the container directly with docker run or a Compose file on the same host.

Deploying outside the catalog is not dramatic, but it does mean the app manager no longer knows that container exists. Tools like ServerCompass help here — it lets you see all your running services at a glance, regardless of whether they were deployed through a catalog, Compose, or a bare docker run. When your app manager's state and your actual container state diverge, a dashboard that reads directly from the Docker socket gives you the ground truth.

For TrueNAS specifically, if you need to expose a port the app form does not show, the path is: note the app's Docker network name (visible in docker network ls when the app is running), then deploy a sidecar container on that network that handles the port forwarding or additional configuration. It is more moving parts, but it keeps the base app managed by TrueNAS while adding the missing capability alongside it.

Samba: container or bare metal

The honest answer for Samba is that containerising it does not remove the complexity — it relocates it. You still need to configure user mappings, share paths, and permissions. The difference is where you edit those settings and how you debug them.

Bare-metal Samba has one advantage: the documentation, while terse, is authoritative and complete. Every configuration option is in the man page. There is no translation layer between what you write and what smbd reads.

Containerised Samba (using images like dperson/samba or servercontainers/samba) gives you restart policies, isolation, and easy version pinning. The trade-off is that bind mounts for the share directories need to match the UID/GID mappings inside the container, and getting that wrong produces permission errors that are harder to trace than native Samba errors because you have to look at both the host filesystem permissions and the container user mappings simultaneously.

For a home server where Samba is serving a handful of users and a few share paths, bare metal is easier to operate and debug. If you are running Samba alongside other services that are already containerised and you want a unified restart and update strategy, the container approach is reasonable — just budget extra time for the initial UID/GID setup.

Checklist

  • Before migrating from Unraid templates to Portainer/Compose, run docker network ls and document which networks each container uses; recreate those networks in Compose before starting the migration.
  • Write all new deployments as Compose files, even when managing them through a UI — this preserves the escape hatch if the UI fails.
  • When a TrueNAS app form does not expose the field you need, check if a community Helm chart for the same app includes it before dropping to a bare docker run.
  • If you deploy containers outside the app catalog, use a Docker-socket dashboard like ServerCompass to keep visibility over all running services in one place.
  • For missing ports in TrueNAS apps, deploy a sidecar container on the same Docker network rather than abandoning the catalog-managed app entirely.
  • For Samba, prefer bare metal on home servers with a small number of shares; only containerise if you need a unified restart/update strategy across your stack.
  • When containerising Samba, resolve UID/GID mappings before writing share paths — this is the most common source of permission errors.
  • Test share mounts from a client before calling the Samba setup complete; many configuration errors are silent until an actual mount attempt.

Final verdict