Yes. Multiple containers can bind-mount the same dataset read-only, while one controlled writer or host process owns updates.
The decision matters when several indexers, media servers, or AI services need the same originals without mutation rights. The two competing states are shared read-only views and hidden writable submounts or one app requiring sidecar writes. Begin with a saved configuration and disposable data, observe one branch at a time, and stop if the test expands data-loss, permission, or availability risk.
Define the Conditions Behind the Shared Read-Only Dataset Mounts Decision
Record the environment before changing anything: software and firmware versions, device identities, mount or network path, free space, permissions, and the observable symptom. The baseline must preserve enough detail to reproduce several indexers, media servers, or AI services need the same originals without mutation rights.
The first candidate is shared read-only views. The second is hidden writable submounts or one app requiring sidecar writes. The current Compose read-only service volumes defines the mechanism or command boundary used in the test; it does not replace observation from this specific home server.
Write the acceptance condition and stop condition before running the discriminator. A pass must change the evidence predicted by one branch while leaving unrelated services unchanged; a fail must return the system to the saved state rather than trigger a chain of speculative fixes.
Test the Claim Without Lowering the Original Requirement
Use this discriminator: inspect resolved mounts for every container, attempt a disposable write, and verify file changes propagate from the authorized writer. Keep workload, client, path, file set, and timing constant so the result is attributable to the changed variable.
Use read-only volume inspection to select the field that can actually separate the branches, then capture its timestamp, exit status, error text, device or snapshot identity, latency, transferred bytes, permissions, and recovery state. A clean command exit is not enough when identity, durability, or application state is the claim under test.
Repeat the test once after a restart, reconnect, remount, or cold cache when that event is part of the original condition. If the first run is destructive or the environment cannot be restored, stop and reproduce on a disposable copy instead.
volumes:
- /nas/media:/media:ro
- app-cache:/cache:rw
Interpret Pass, Fail, and Exception Results
PASS: all readers see updates but write, rename, and delete operations fail inside each container. Record the exact version, identity, and workload that passed so the conclusion stays conditional rather than becoming a universal claim.
FAIL: one mount is accidentally rw, a nested mount bypasses policy, or the app cannot operate without adjacent writes. A fail does not automatically prove the opposite branch when network, memory, permissions, or source consistency can influence both; isolate those shared dependencies before escalating.
EXCEPTION OR AMBIGUOUS RESULT: stop the affected container and separate its writable cache or sidecars into another volume. Preserve logs and do not run repair, prune, destroy, repartition, or recursive ownership commands until a recoverable copy exists.
Confirm the Decision Under the Original Workload
Apply the action matched to the observed branch, then repeat the original condition rather than a reduced substitute. The decision holds only when all readers see updates but write, rename, and delete operations fail inside each container across two cycles or the relevant reboot, sleep, interruption, or load transition.
Use the read-only root filesystems to check the nearest dependent workflow, but keep the original trigger unchanged. Unrelated datasets, shares, containers, users, and recovery points must retain their previous access and timing.
The stop boundary is explicit: if one mount is accidentally rw, a nested mount bypasses policy, or the app cannot operate without adjacent writes, return to the last verified configuration, retain the evidence, and escalate to a deeper platform or hardware test only when the branch is repeatable.
After the target result holds, compare it with the container identity mapping so the fix does not move risk into a neighboring service. A successful target test with a new backup, identity, timeout, or availability failure is still a failed change.
FAQ
For shared read-only dataset mounts, the remaining searches usually concern can readers see changes made by the writer, does :ro protect the host dataset from root in the container, and where should thumbnails or databases go. The answers below keep those edge cases separate from the primary decision.
The acceptance boundary does not move: all readers see updates but write, rename, and delete operations fail inside each container. If a follow-up condition changes the filesystem, identity, network path, or application version, repeat only the discriminator affected by that change.
Stop broadening the experiment when one mount is accidentally rw, a nested mount bypasses policy, or the app cannot operate without adjacent writes. At that point, stop the affected container and separate its writable cache or sidecars into another volume; preserve the evidence before escalating to the platform, storage, or hardware owner.
Can readers see changes made by the writer?
Yes, subject to application caching and filesystem event behavior; test refresh and rename cases.
Does :ro protect the host dataset from root in the container?
It makes that mount read-only, but broader privileges or other mounts can still expand access.
Where should thumbnails or databases go?
Use separate writable volumes so generated state does not require write access to originals.
For shared read-only dataset mounts, the practical answer remains conditional: all readers see updates but write, rename, and delete operations fail inside each container. When one mount is accidentally rw, a nested mount bypasses policy, or the app cannot operate without adjacent writes, stop the affected container and separate its writable cache or sidecars into another volume; a partial success that cannot survive the original workload is not compatibility.
Support & Tips
More to Read

Can a Self-Hosted Gallery Preserve Apple Live Photo Pairing?
A conditional home-server decision for Apple Live Photo pairing, with controlled tests, result interpretation, rollback, and focused FAQs.

Can You Import Google Takeout and Phone Backups Into One Photo Library?
A conditional home-server decision for combined photo import, with controlled tests, result interpretation, rollback, and focused FAQs.

Can Immich Use an External Library Without Taking Ownership of the Files?
A conditional home-server decision for Immich external-library ownership, with controlled tests, result interpretation, rollback, and focused FAQs.

