Running a Zano Node with Docker
This is the official Zano full-node Docker image, built and published by the Zano team. If you want to run a Zano node in a container, this is the image to use.
Docker Hub: https://hub.docker.com/r/zanoproject/zano-full-node
The image runs zanod (the Zano daemon) as a mainnet full node and also ships simplewallet. Binaries are statically built.
Quick start
docker run --restart=always \
-v /var/data/zano-data:/home/zano/.Zano \
-p 0.0.0.0:11121:11121 \
-p 127.0.0.1:11211:11211 \
--name=zanod -dit zanoproject/zano-full-node
Before the first run, create the host data directory and make it writable by the container's non-root zano user (uid 1000):
sudo mkdir -p /var/data/zano-data
sudo chown -R 1000:1000 /var/data/zano-data
The blockchain lives in the mounted volume (/home/zano/.Zano), so it persists across restarts and image upgrades.
Ports
| Port | Purpose | Recommended exposure |
|---|---|---|
| 11121 | P2P | Keep reachable from the Internet; inbound peers help your node stay well-connected. |
| 11211 | RPC | Keep private. In the example above it is published only to 127.0.0.1 on the host. |
Managing the container
- Attach to the daemon console:
docker attach zanod - Detach and leave it running:
Ctrl+P, thenCtrl+Q - Stop:
docker stop zanod
Securing the RPC port
The image starts the daemon with --rpc-bind-ip=0.0.0.0, so it listens on all interfaces inside the container. That is required for Docker port publishing to work, but it does not make the RPC safe to expose. Protecting it is your responsibility. Choose one of:
- Bind to loopback (as in the quick start): publish RPC only to the host with
-p 127.0.0.1:11211:11211, then use it locally. Do not use-p 11211:11211(which binds0.0.0.0) or--network hostunless you intend to expose it. - Firewall: block inbound traffic to port
11211from the Internet at the host firewall or cloud security-group level. - Reverse proxy (if RPC must be reachable remotely): put nginx (or similar) in front of the endpoint and terminate TLS there, adding authentication and/or IP allow-listing. Never publish the raw RPC port directly.
Building your own image
The image is built from the Dockerfile in the main repo. You can build a specific branch or tag and override library versions via build args:
docker build \
--build-arg BRANCH=release \
-f utils/docker/zano-full-node/Dockerfile .
Available build args: BRANCH, CMAKE_VERSION_DOT / CMAKE_HASH, BOOST_VERSION / BOOST_VERSION_DOT / BOOST_HASH, and OPENSSL_VERSION_DOT / OPENSSL_HASH.