Repository navigation
Execution Modes
PoCX Wallet supports two execution modes for services: Docker and Native.
Services run in isolated Docker containers with their own filesystem, networking, and resources.
- ✅ Consistent Environment: Same behavior across all platforms
- ✅ Easy Updates: Pull new images with one command
- ✅ Isolation: Services don't interfere with host system
- ✅ Networking: Built-in Docker networking between services
- ✅ Security: Container isolation provides additional security
- ❌ Docker Required: Must have Docker installed and running
- ❌ Resource Overhead: Containers use more memory/disk
- ❌ Complexity: Additional layer between service and host
- Development and testing
- Production deployments
- Multi-service setups with networking
- Platforms where Docker is readily available
Services run as native processes directly on the host operating system.
- ✅ No Docker Required: Works without Docker installation
- ✅ Lower Overhead: Direct process execution uses fewer resources
- ✅ Direct Access: Full access to host hardware and filesystem
- ✅ Performance: Potentially better performance for I/O intensive tasks
- ❌ Manual Management: Must download and manage binaries
- ❌ Platform Specific: Binaries must match OS and architecture
- ❌ Less Isolation: Services run with user's permissions
- ❌ Updates: Manual version management required
- Resource-constrained systems (Raspberry Pi, etc.)
- Systems without Docker (or where Docker is difficult to install)
- Direct hardware access requirements
- Minimal overhead deployments
Open services.yaml and change the execution_mode for the desired service:
services:
- id: "bitcoin-node"
name: "Bitcoin-PoCX Node"
execution_mode: "native" # Change from "docker" to "native"
# ... rest of configurationIf switching to native mode:
- Open PoCX Wallet CLI
- Navigate to the service menu (e.g.,
[Node]) - Select "Manage Versions"
- Choose a version compatible with your platform
- Wait for download and extraction to complete
The service will now run in the selected mode:
- Docker: Container is created and started
- Native: Process is spawned on the host
Pulling New Images:
- Navigate to service menu
- Select "Manage Versions"
- Choose Docker image from list
- Image is pulled from registry
- Service configuration updated automatically
Available images are defined in services.yaml:
source:
docker:
images:
- repository: "ghcr.io/ev1ls33d/pocx-wallet"
image: "bitcoin"
tag: "v30-RC3"
description: "Bitcoin-PoCX v30 Release Candidate 3"
- repository: "ghcr.io/ev1ls33d/pocx-wallet"
image: "bitcoin"
tag: "latest"
description: "Latest development build"Downloading Binaries:
- Navigate to service menu
- Select "Manage Versions"
- Choose binary version (automatically filtered by platform)
- Binary downloads and extracts to
./service-id/directory - Files outside whitelist are removed (if specified)
Available downloads are defined in services.yaml:
source:
native:
downloads:
- url: "https://github.com/.../binary-linux-x64.tar.gz"
version: "v30-RC3"
platform: "linux-x64"
description: "Binary for Linux x64"
whitelist:
- "binary"
- "binary-cli"The wallet automatically detects your platform:
- linux-x64: Linux on x86_64
- linux-arm64: Linux on ARM64
- win-x64: Windows on x86_64
- win-arm64: Windows on ARM64
- osx-x64: macOS on x86_64
- osx-arm64: macOS on Apple Silicon
Only downloads matching your platform are shown in the menu.
When downloading native binaries, you can specify a whitelist of files to keep:
whitelist:
- "bitcoind"
- "bitcoin-cli"After extraction, all files not in the whitelist are deleted. This is useful when:
- Archive contains multiple binaries but you only need specific ones
- Archive includes documentation, tests, or other unnecessary files
- Different services use binaries from the same archive
Logs are retrieved from Docker:
docker logs <container-name>Accessible via CLI: Service Menu → View Logs
Logs are written to files in the logs/ directory:
-
logs/<service-id>.log- Standard output -
logs/<service-id>.error.log- Standard error
Accessible via CLI: Service Menu → View Logs
-
Start:
docker runwith configured settings -
Stop:
docker stopwith graceful timeout -
Status: Check container state with
docker inspect
-
Start: Spawn process with
System.Diagnostics.Process - Stop: Send SIGTERM (Unix) / CloseMainWindow (Windows)
- Force Kill: After 5-second timeout if graceful shutdown fails
- Status: Check if process is still alive
Container won't start:
- Check Docker is running:
docker ps - Check Docker daemon logs
- Verify image exists:
docker images
Permission errors:
- Linux: Add user to
dockergroup - Windows: Run Docker Desktop as Administrator
Binary not found:
- Download binary via "Manage Versions"
- Verify extraction completed successfully
- Check
./service-id/directory exists
Permission denied:
- Linux/macOS:
chmod +x ./service-id/binary - Windows: Run as Administrator
Process exits immediately:
- Check error log:
logs/service-id.error.log - Verify binary is compatible with platform
- Check required dependencies are installed
- Use specific version tags, not
latestfor production - Monitor container resource usage
- Regularly pull updates
- Use Docker volumes for persistent data
- Keep binaries updated
- Monitor process resource usage
- Backup binary directories before updates
- Set up proper file permissions
- Use dedicated user accounts for services (production)
| Feature | Docker Mode | Native Mode |
|---|---|---|
| Setup Complexity | Medium | Low |
| Resource Usage | Higher | Lower |
| Isolation | Strong | Weak |
| Platform Support | All | Platform-specific |
| Update Process | Pull image | Download binary |
| Networking | Docker network | Host network |
| Storage | Volumes | Direct filesystem |
| Security | Container isolation | User permissions |
- Stop Docker service
- Export data from Docker volume (if needed)
- Change
execution_modeto"native" - Download binary via "Manage Versions"
- Copy data to native service directory
- Start native service
- Stop native service
- Backup native service directory
- Change
execution_modeto"docker" - Pull Docker image via "Manage Versions"
- Copy data to Docker volume (if needed)
- Start Docker service
Next: Version Management
Previous: Services Overview
PoCX Wallet is experimental software. Use at your own risk.
📖 Documentation • 🐛 Report Issue • 💻 Source Code