Community Solution

Portainer Stack Fails on ZimaOS: Check Relative Volume Paths First

A ZimaOS user saw an error while creating a Portainer stack and initially suspected the host filesystem was read-only. The root cause was later identified as relative volume paths in docker-compose.yml.

This thread started as a question about disabling a read-only filesystem in ZimaOS, but that was not the real problem. After checking the stack, the original poster found that the Compose file used relative volume paths.

That distinction matters because changing host filesystem permissions or remounting system paths would have been the wrong fix for this case.

Portainer stack deployment error that led the user to inspect Docker Compose volume paths
Original community screenshot from the failed Portainer stack deployment before the relative-volume cause was identified.

Check the Compose File Before Changing ZimaOS

When a container stack cannot create or write to a path, first identify what the Compose file is mounting into the container. A bind mount can reference a host path, while a named volume is managed by Docker. The current Docker Compose volume rules notes that relative host paths are resolved from the Compose project location.

For a self-hosted NAS, an explicit persistent path is often easier to reason about than an ambiguous relative path because you can verify that the source directory actually exists and is writable.

Why the Read-Only Assumption Was Misleading

A true read-only filesystem problem usually affects more than one Compose path and should be diagnosed from the actual mount state and system logs. In this thread, the user did not need to turn off a ZimaOS protection mechanism. They corrected their relative volume configuration instead.

What the Community Suggested

Before the root cause was known, a community reply suggested opening ZimaOS Developer Mode, using the web terminal as root, and manually creating the required directory. That can be useful when the intended host path genuinely does not exist, but it should follow the Compose-path check rather than replace it.

A Safer Troubleshooting Order

  1. Inspect every volumes: entry in the Compose file.
  2. Determine whether each source is a named volume, absolute host path, or relative path.
  3. Confirm the expected host directory exists.
  4. Confirm the container is not explicitly mounted with :ro or read_only: true.
  5. Only investigate host filesystem mount state if the same write failure persists outside the container configuration.

Current Docker and Portainer Context

For current ZimaOS deployments, the Portainer hardware requirements gives the broader Portainer persistence and runtime context, while the first Docker app explains how ZimaOS applications map persistent data into containers. If a mount is genuinely read-only rather than merely misaddressed, the Docker bind mount fix separates a configured :ro mount from a host filesystem that has stopped accepting writes.

Docker's Docker bind mount rules confirms that bind mounts can use host source paths and that read-only behavior is explicitly controlled with readonly or ro. The official Portainer stack behavior defines a Portainer stack as a related set of services, which is why the Compose file should be inspected before changing the ZimaOS host itself.

Bottom Line

The reported Portainer stack error was not solved by disabling a read-only filesystem. The user corrected relative volume paths in docker-compose.yml. For similar ZimaOS container errors, validate the Compose mount definition before making host-level filesystem changes.