Skip to main content
Running Fuego in a Docker container is the fastest way to get a full node up without installing build dependencies on your host system. The official multi-stage Dockerfile compiles the node binaries from source inside an Ubuntu 22.04 builder image, then copies only the stripped binaries into a minimal runtime image. This keeps the final image small and free of build toolchain bloat. The container exposes port 20808 for peer-to-peer traffic and port 28180 for the daemon RPC.

Prerequisites

  • Docker 20.10 or later
  • Docker Compose v2 (if using Compose)
  • ~20 GB of free disk space for the blockchain data volume

Build the image

Clone the Fuego repository and build the Docker image from the project root:
git clone https://github.com/usexfg/fuego
cd fuego
docker build -t fuego-node:latest .
The build uses two arguments you can override if needed:
ArgumentDefaultDescription
BUILD_TYPEReleaseCMake build type
ENABLE_OPTIMIZATIONSONEnable compiler optimizations
To pass custom build arguments:
docker build \
  --build-arg BUILD_TYPE=Release \
  --build-arg ENABLE_OPTIMIZATIONS=ON \
  -t fuego-node:latest .
1

Run the node container

Start a container with P2P and RPC ports mapped and a named volume for blockchain data persistence:
docker run -d \
  --name fuego-node \
  -p 20808:20808 \
  -p 28180:28180 \
  -v fuego-data:/home/fuego/.fuego \
  fuego-node:latest
The container starts fuegod with --data-dir=/home/fuego/.fuego, --rpc-bind-ip=0.0.0.0, and --rpc-bind-port=28180 by default, as defined in the Dockerfile CMD.
Always use a named volume (or a bind mount to a persistent path) for /home/fuego/.fuego. If you remove and recreate the container without a persistent volume, the node will re-download the entire blockchain from scratch.
2

Verify the node is running

Check the container logs to confirm the node is syncing:
docker logs -f fuego-node
You can also query the RPC health endpoint directly:
curl http://127.0.0.1:28180/getinfo
A JSON response with height and peer information confirms the daemon is responding.
3

Deploy with Docker Compose

The included docker-compose.yml starts both the fuego-node (daemon) and fuego-wallet (walletd) services on an isolated bridge network. Both services share the same built image.
docker compose up -d
The Compose file maps the following ports:
ServicePortPurpose
fuego-node20808P2P networking
fuego-node28180Daemon RPC
fuego-wallet8070Wallet RPC (walletd)
fuego-wallet connects to fuego-node automatically via the internal fuego-network bridge using the hostname fuego-node on port 28180.To bring only the node service up (without the wallet):
docker compose up -d fuego-node
To include the optional Nginx reverse proxy (defined with a web profile):
docker compose --profile web up -d
Two named volumes are created by Compose: fuego-data for blockchain state and fuego-wallet-data for wallet files. Both persist across docker compose down restarts. They are only removed if you run docker compose down -v.
4

Execute commands inside the container

Open an interactive shell or run a single command inside the running container:
# Run a single command
docker exec -it fuego-node fuegod help

# Open an interactive shell
docker exec -it fuego-node /bin/bash
From the shell you can inspect data files in /home/fuego/.fuego or check daemon status interactively.

Restrict RPC access in production

By default the RPC port is bound to all interfaces (0.0.0.0) inside the container, which is then exposed on your host via -p 28180:28180. In a production environment you should either bind the port to 127.0.0.1 on the host or enable restricted mode:
Pass --restricted-rpc to fuegod to disable wallet-sensitive RPC methods and expose only read-only node information. Override the default CMD when running the container:
docker run -d \
  --name fuego-node \
  -p 20808:20808 \
  -p 28180:28180 \
  -v fuego-data:/home/fuego/.fuego \
  fuego-node:latest \
  --data-dir=/home/fuego/.fuego \
  --rpc-bind-ip=0.0.0.0 \
  --rpc-bind-port=28180 \
  --restricted-rpc

Health check

The Dockerfile includes a built-in health check that polls the RPC endpoint every 30 seconds:
curl -f http://localhost:28180/getinfo
You can monitor container health status with:
docker inspect --format='{{.State.Health.Status}}' fuego-node
A status of healthy means the daemon is running and responding to RPC requests.