You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/architecture.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -188,6 +188,12 @@ Baseline `default` and `terrarium` profile behavior:
188
188
- root disk on the Terrarium pool
189
189
- NIC attached to `terrarium-ovn`
190
190
191
+
Terrarium does not make ordinary workload containers privileged. The isolated
192
+
ID map means container root, including root inside a Docker daemon nested in the
193
+
container, is still separated from host root by LXC's user-namespace boundary.
194
+
That gives Docker-heavy deployments a host protection layer they would not get
195
+
from running all Docker workloads directly on the VPS.
196
+
191
197
This is an intentional product choice: Terrarium optimizes for isolated environments that can still run realistic developer and agent workloads, including Docker Compose stacks, instead of optimizing for the narrowest possible LXC feature surface.
192
198
193
199
The `strict` profile keeps the Terrarium root disk and OVN NIC but omits
Copy file name to clipboardExpand all lines: docs/guides/compose.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,7 @@ This is especially useful for complex projects that want their own dependencies,
8
8
9
9
Terrarium's LXD `default` profile enables the settings that Docker-in-LXC usually needs:
10
10
11
+
-`security.idmap.isolated=true`
11
12
-`security.nesting=true`
12
13
-`security.syscalls.intercept.mknod=true`
13
14
-`security.syscalls.intercept.setxattr=true`
@@ -38,6 +39,16 @@ Terrarium gives each Compose deployment its own boundary:
38
39
39
40
The stack lives in an LXC container instead of directly on the host. If the workload is compromised or misconfigured, the host is still a separate layer with a smaller blast radius.
40
41
42
+
Terrarium's normal workload containers are unprivileged and use isolated ID
43
+
maps. That means root inside the LXC, and root inside Docker containers created
44
+
by the nested Docker daemon, does not become host root. This is especially
45
+
useful for Compose stacks copied from the internet or built by app installers
46
+
that assume broad Docker access.
47
+
48
+
This is still a boundary, not a permission to be careless. Avoid `privileged:
49
+
true`, broad host bind mounts, host networking, and public admin panels unless
50
+
the app genuinely needs them and you understand the risk.
51
+
41
52
### Isolation
42
53
43
54
Each Compose stack gets its own filesystem, packages, images, volumes, and daemon state. That makes it much easier to keep multiple projects on one VPS without constant interference.
Copy file name to clipboardExpand all lines: docs/guides/dokploy.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,6 +11,11 @@ On Terrarium, the clean model is:
11
11
12
12
That means Dokploy gets the server model it expects, while Terrarium still gives you LXD isolation and ZFS snapshots around each Docker host.
13
13
14
+
Those Docker hosts are unprivileged LXC containers by default. Root inside the
15
+
deployment-server container, including root inside Docker workloads launched by
16
+
Dokploy, is mapped away from host root, which adds a useful host-side safety
17
+
layer for Docker deployments with imperfect defaults.
18
+
14
19
## When to use this instead of plain Compose
15
20
16
21
Use [Isolated Docker Compose deployments](./compose) when you want one app stack in one container and you are comfortable managing Compose files yourself.
0 commit comments