Developer building own container runtime details quirks in Docker's design
A developer writing a personal container runtime project shared findings about how Docker actually works under the hood. They note that containers are not a distinct Linux feature but a combination of namespaces, cgroups and networking tricks, that container images are simply folders used with chroot or pivot_root, and that Docker's runc runtime (written in Go) needs workarounds because Go lacks fork and runs multi-threaded by default.
GoKawiil's interpretation of the reporting above, not reported fact.
The post suggests that widely used infrastructure tools like Docker rely on layered, somewhat improvised combinations of older Linux primitives rather than a single unified 'container' mechanism, which could explain some of the complexity and edge-case bugs engineers encounter. It also implies that language choice, such as Go's threading model, can force unusual engineering workarounds in systems-level software, a consideration other toolmakers might weigh when building similar runtimes.
- Containers are just regular Linux processes constrained by namespaces, cgroups and networking isolation, not a single dedicated kernel feature.
- Docker images are essentially folders mounted as a new root directory via chroot or pivot_root.
- Docker's runc runtime, written in Go, needs a special C module and self-exec trick to work around Go's lack of fork and its multi-threaded runtime.
Source: codeandcake.dev, 2026-10-22
Published there as: “Docker is weird”
Read the original report → The summary and analysis above are GoKawiil's own, written from reporting by the source above. Facts and quotes belong to the original publisher.