Monero
Docker or Native monerod? Why Simpler Wins
Compare Docker and native monerod on Linux: storage, updates, networking, security, and why a direct systemd service wins for a dedicated node.

A dedicated Monero server has a straightforward job: run monerod, maintain its database, and answer the connections you permit. Using Docker also means installing and maintaining its container runtime.
For this use case, we would skip it. The convenience of a short container command can hide a longer maintenance bill: daemon privileges, image updates, storage mappings, and networking rules. A short installation command does not show what you will need to check during an upgrade or outage.
Docker daemon privileges
Docker's normal rootful daemon has extensive control over the host. Someone allowed to control it can mount host directories into containers and potentially change sensitive files. Docker itself says daemon access should be limited to trusted users. Docker security documentation.
That makes access to the Docker socket a serious privilege boundary. Handing it to a dashboard or another container expands what you must trust. A tool meant to simplify one service can become a powerful route into the entire machine.
Rootless Docker reduces this particular risk. It does not remove the runtime, its configuration, or the need to maintain it. For one node, an unprivileged monerod service avoids introducing that daemon in the first place. Rootless mode.
Granting broader access to fix a permissions error can weaken the container's isolation. Before copying a container recipe, inspect its granted permissions and mounted directories. Check which host directories the container can write to and whether that access is necessary for monerod.
Firewall rules can mislead you
A ufw rule that denies unwanted traffic may not cover ports published through Docker bridge networking.
Docker installs rules for published ports. Its documentation explains that this traffic bypasses the ufw rules you expected to control it. An apparently sensible host firewall is not enough evidence that a published container port is private. Docker and ufw.
For monerod, confusing peer access with RPC access is especially unhelpful. Wallets and management tools use RPC. Publishing it needs deliberate access controls. Docker adds another mapping between the program's listening address and the outside world.
Native monerod still needs a firewall and correct RPC settings. Its listening addresses and ports are on the host, without a container port mapping to check. See the monerod reference.
Container storage needs an explicit mount
Downloading and checking the blockchain takes time and bandwidth. If the database is lost, you may have to repeat that work.
Docker's writable container layer disappears when that container is destroyed. Persistent volumes or bind mounts solve this, but you must configure them correctly. The container's path, host storage, and file ownership all need to agree. Docker storage documentation.
A missing mount can leave monerod writing somewhere you never intended. A replacement container pointed at an empty location can look like a node that has forgotten its blockchain. Before syncing again, you need to find the original database and check why the container cannot see it.
With a native service, the configured data directory is directly visible on the host. That simpler relationship is easier to inspect when space runs low or permissions break.

Images add another chain of trust
Pulling an image means trusting what its builder put inside. Check the Monero version and the source of its executable. Review the included packages and who rebuilds the image when those components need fixes.
Check the selected image rather than relying on its tag. Tags can change. A pinned digest identifies an exact image, but keeping that pin forever also keeps old software. Docker recommends trusted sources, regular rebuilds, and deliberate version control. Image-building guidance.
Building and reviewing your own image is an option. For one node, we prefer to verify the Monero release directly and avoid maintaining an image build as well.
More layers make failures harder to explain
When a containerized node stops responding, the fault might be monerod, its mount, its network mapping, its restart settings, or Docker itself. The extra components create extra questions before you reach the actual fault.
A native systemd service gives you a simpler starting point. Assuming the service uses this name:
systemctl status monerod.service
journalctl -u monerod.service -n 50 --no-pager
These show service status and recent journal entries. Check the configured application log too. Monero's systemd guide describes the underlying setup.
Less maintenance for a dedicated node
Docker suits teams already maintaining tested container workflows. Its isolation and repeatable packaging have value. That does not make it a sensible default for every small server.
For one dedicated Linux node, choose a verified monerod release, a restricted service account, clear storage, and explicit network rules. That leaves the host and monerod to maintain, without adding Docker's daemon, image lifecycle, mounts, and port mappings.