Get a privacy-focused mesh node running in minutes, not hours.
# Clone repo
git clone https://github.com/Jeff-Bouchard/ness.hub.docker.com.git
cd ness.hub.docker.com
# Copy config
cp .env.example .env
# Start minimal stack (emercoin + dns-proxy)
docker compose -f docker-compose.minimal.yml up -d
# Check status
docker psThat's it. Emercoin is syncing, DNS is resolving privately.
For: Testing, minimal footprint, DNS + blockchain only
docker compose -f docker-compose.minimal.yml up -dServices started:
emercoin-core— Blockchain node (6661, 6662)yggdrasil— Mesh network (9001)privateness— Core blockchain (6006, 6660)
Check status:
docker compose -f docker-compose.minimal.yml ps
docker logs emercoin-coreStop:
docker compose -f docker-compose.minimal.yml downFor: Privacy files, mesh routing, entropy control
Includes everything from Minimal plus:
pyuheprng-privatenesstools— Cryptographic entropy + file tools (5000, 8888)dns-reverse-proxy— Decentralized DNS (53, 8053)ipfs— Content storage (4001, 5001, 8080)
docker compose -f docker-compose.ness.yml up -dCheck status:
docker compose -f docker-compose.ness.yml ps
docker logs -f pyuheprng-privatenesstoolsAccess PrivatenessTools CLI:
docker exec pyuheprng-privatenesstools privateness-cli --helpStop:
docker compose -f docker-compose.ness.yml downFor: Complete mesh infrastructure with all routing protocols
Includes everything from Essential plus:
i2p-yggdrasil— I2P + Yggdrasil (7657, 4444, 6668)skywire— Skycoin mesh visor (8000)amneziawg— Stealth VPN layer (51820)
docker compose -f docker-compose.yml up -dCheck all services:
docker compose psStop:
docker compose down# All services
docker compose logs -f
# Specific service
docker compose logs -f emercoin-core
docker compose logs -f pyuheprng-privatenesstools
docker compose logs -f dns-reverse-proxy# Running containers
docker ps
# Network connectivity
docker network inspect ness-network
docker inspect emercoin-core | grep -A 10 '"Networks"'docker compose restart emercoin-core
docker compose restart pyuheprng-privatenesstools# Rebuild specific image (from source)
docker build -t nessnetwork/emercoin-core:latest ./emercoin-core
docker compose up -d# Run privateness CLI
docker exec privateness privateness-cli status
# Run emercoin CLI
docker exec emercoin-core emercoin-cli -datadir=/data getinfo
# Get entropy stats
docker exec pyuheprng-privatenesstools curl http://localhost:5000/statusData is already persisted in Docker volumes:
emercoin-data— Blockchain state (~1-2GB)ipfs-data— IPFS storage (~configurable)yggdrasil-data— Mesh network statei2p-data— I2P node state
To backup:
docker run --rm -v emercoin-data:/data -v $(pwd):/backup \
alpine tar czf /backup/emercoin-backup.tar.gz -C /data .| Service | Port | Protocol | Purpose |
|---|---|---|---|
| emercoin-core | 6661 | TCP | P2P blockchain |
| emercoin-core | 6662 | TCP | JSON-RPC API |
| yggdrasil | 9001 | UDP | Mesh network |
| privateness | 6006 | TCP | P2P |
| privateness | 6660 | TCP | JSON-RPC |
| Service | Port | Protocol | Purpose |
|---|---|---|---|
| pyuheprng | 5000 | TCP | Entropy service |
| privatenesstools | 8888 | TCP | File tools API |
| dns-proxy | 53 | UDP/TCP | DNS server |
| dns-proxy | 8053 | TCP | DNS API |
| ipfs | 4001 | TCP | IPFS P2P |
| ipfs | 5001 | TCP | IPFS API |
| ipfs | 8080 | TCP | IPFS Gateway |
| Service | Port | Protocol | Purpose |
|---|---|---|---|
| i2p | 7657 | TCP | I2P console |
| i2p | 4444 | TCP | HTTP proxy |
| skywire | 8000 | TCP | Visor API |
| amneziawg | 51820 | UDP | VPN |
Customize ports in .env:
# Edit .env
EMERCOIN_PORT_RPC=6662
PRIVATENESS_PORT_RPC=6660
DNS_PORT_UDP=53
# etc.
# Restart
docker compose down
docker compose up -ddocker logs <container-name>
# Check for missing dependencies or configuration errors# Find what's using port 6661
lsof -i :6661 # macOS/Linux
Get-NetTCPConnection -LocalPort 6661 | select ProcessName # Windows
# Change port in .env and restart# Check usage
docker system df
# Clean up (removes stopped containers & unused images)
docker system prune -a
# Remove specific volume
docker volume rm emercoin-data# Check resource usage
docker stats
# Limit memory for a service (in docker-compose.yml)
services:
emercoin-core:
mem_limit: 2g
memswap_limit: 2g# View last exit code
docker inspect <container> | grep ExitCode
# Read full logs
docker logs <container> --tail 100All containers run on an internal bridge network (ness-network). Port mappings are explicit in docker-compose.yml.
Files in emercoin-data volume are owned by the container. To access:
docker run --rm -v emercoin-data:/data alpine ls -la /data- RPC user/pass: Set in
.env(default:rpcuser/rpcpassword) - Change them in production:
# Edit .env
EMERCOIN_USER=myuser
EMERCOIN_PASS=myrandompassword
docker compose down && docker compose up -dOnly pyuheprng-privatenesstools runs privileged (to feed /dev/random). No other services have elevated privileges.
Create a .env file (copy from .env.example):
# Blockchain
EMERCOIN_PORT_P2P=6661
EMERCOIN_PORT_RPC=6662
EMERCOIN_USER=rpcuser
EMERCOIN_PASS=rpcpassword
# Mesh networks
YGGDRASIL_PORT=9001
SKYWIRE_PORT=8000
# Privacy services
PRIVATENESS_PORT_P2P=6006
PRIVATENESS_PORT_RPC=6660
PYUHEPRNG_PORT=5000
PRIVATENESSTOOLS_PORT=8888
# DNS
DNS_PORT_UDP=53
DNS_PORT_TCP=53
DNS_API_PORT=8053
# Resource limits (optional)
EMERCOIN_MEM_LIMIT=2g
YGGDRASIL_MEM_LIMIT=512mThen restart:
docker compose down
docker compose up -d-
Read the documentation:
- SERVICES.md — All services explained
- NETWORK-ARCHITECTURE.md — How traffic flows
- CRYPTOGRAPHIC-SECURITY.md — Security model
-
Join the mesh:
- Connect your node to the Ness network (see Skywire docs)
- Share your node address to peers
-
Use PrivatenessTools:
- Encrypt files to IPFS
- Backup to decentralized storage
- CLI:
docker exec pyuheprng-privatenesstools privateness-cli --help
-
Monitor your node:
- Dashboard: TBD
- Stats:
docker stats
- GitHub Issues: https://github.com/Jeff-Bouchard/ness.hub.docker.com/issues
- Discord: TBD
- Docs: Full documentation in
doc/folder
Stop all services (data persists):
docker compose downStop and remove all data:
docker compose down -vRemove everything (containers, images, volumes):
docker compose down -v --rmi allHappy networking!