Having trouble with Pi-Node? Here’s my recommended solution. Pi-Node on Linux Docker: installation and migration—here are the issues, and here’s how to fix them!
Running a Pi-Node on Linux with Docker sounds simple at first glance: start containers, expose ports, done. In practice, however, it quickly becomes apparent that the Pi-Node is internally far more complex than a typical Docker service.
The following article is based on a real migration and troubleshooting process of a productive Pi Mainnet Node that had previously been running stably for over a year on Windows with Docker Desktop and WSL2 before being fully migrated to Linux.
Notes on data backup
When processing storage media: hard disk, virtual hard disk, USB stick, volume etc. and databases, data may be lost for several reasons. Liability is generally excluded.
If you follow the topics and examples discussed in this article and use them, I strongly recommend that you make a data backup beforehand!
This is not only about the installation itself, but especially about:
- typical failure scenarios
- PostgreSQL and permission issues
- differences between Windows/WSL and Linux
- Docker-specific pitfalls
- networking problems
- monitoring
- and the most reliable method for activating the Pi-Node
The article is intentionally detailed and is meant not only to provide a “works somehow” solution, but also to explain the technical background.
Video: Pi-Node on Linux Docker, Installation/Migration
Language: 🇩🇪|🇬🇧
☝️ Use YouTube subtitles for all languages.
Initial Situation
The original environment consisted of:
- Docker Desktop for Windows
- WSL2
- official Pi Node Windows software
- Docker Pi-Node container
The node had been running stably on Mainnet for over a year.
Then a gradual failure started to appear:
- at first, a restart was needed every few days
- then daily
- later, the node became permanently stuck
- eventually, it stopped synchronizing completely
Typical behavior:
- node remains at block 1
- no visible activity
- container appears to run normally
- no error messages in the GUI
Problems under Windows and WSL2
The first suspicion initially focused on:
- networking issues
- corrupted chain data
- damaged buckets
- Docker problems
However, the container itself was running stably:
docker ps -a
The important processes were active:
supervisorctl status
Result:
- postgresql RUNNING
- stellar-core RUNNING
At first glance, this looked correct.
The decisive clue appeared later inside the internal directories.
The Actual Problem: PostgreSQL and Permissions
The first clear indications came from the internal data paths.
The critical point:
The Node showed in the LOG:
Waiting for postgres to be available...
The container did start PostgreSQL processes, but the database itself was no longer initialized correctly.
The Major Problem under Windows + WSL2
This exposed a well-known Docker/WSL issue.
Internally, the Pi-Node stores PostgreSQL data inside Docker volumes or bind mounts. Under Windows + WSL2 this frequently leads to:
- UID/GID problems
- file locks
- inconsistent permissions
- WAL/SHM locks
- corrupted PostgreSQL files
Exactly this behavior occurred here.
Typical symptoms:
Permission denied
when deleting or writing files.
Especially critical:
- DIPS
- DIPS-shm
- DIPS-wal
- LevelDB files
- PostgreSQL WAL files
Why the Problems Gradually Became Worse
The behavior did not slowly degrade by coincidence.
Most likely the following occurred:
- inconsistent write operations
- corrupted WAL files
- file locks caused by WSL
- increasing PostgreSQL instability
As a result, the node had to be restarted:
- rarely at first
- later more frequently
- eventually permanently
This also explains the classic behavior:
Block 1 and no further activity
Migration to Linux Docker
After the problems under Windows, the node was fully migrated to Linux.
The goal:
- no Docker Desktop
- no WSL2
- native Linux Docker environment
The new environment:
- Ubuntu Linux
- Docker Engine
- Docker Compose
- native volumes
Docker Compose Setup
The Pi-Node was intentionally built with a minimal setup.
services:
pi-node:
image: pinetwork/pi-node-docker:community-v1.0-p22.1
container_name: pi-node
restart: always
command: ["--mainnet"]
ports:
- "31400-31409:31400-31409"
- "11626:11626"
volumes:
- ./pi-node-data:/opt/data
Important:
Using a native Linux filesystem significantly improves stability and performance compared to WSL bind mounts.
Which Pi-Node Version Currently Makes Sense?
At the time of the migration:
pinetwork/pi-node-docker:community-v1.0-p22.1
was the most stable and practical choice.
Newer images such as:
community-v1.0-p23.0.1
already exist, but contain larger internal migrations.
For productive nodes it is recommended to:
- run p22.1 stably first
- test p23 later in a controlled way
Activation and Registration of the Pi-Node
The most important insight:
Technically, the Pi-Node is not really tied to Windows.
However, official registration is currently still performed most reliably through the Windows Pi Node Desktop App.
Most Reliable Activation Strategy
Recommended procedure:
1. One-Time Registration under Windows
Requirements for activating the node:
- installed Pi Network mobile app
- verified Pi account
- installed Windows Pi Node software
Download the official Pi Node software:
The Windows Pi Node software must be installed and fully configured once.
During this process:
- login with the Pi account
- linking with the mobile app
- generation of the Node-ID
- generation of the NODE_SEED
- port verification
- node activation
- install Pi Node Desktop
- activate node
- test ports
- complete verification
This generates:
- NODE_SEED
- Node Public Key
- complete stellar-core.cfg
2. Then Migration to Linux
Under Linux the following are then transferred:
- stellar-core.cfg
- volumes
- Node-ID
- NODE_SEED
After that, the node can run completely without Windows.
Where are the files located under Windows?
The relevant files are typically located at:
C:\Users\<USER>\AppData\Roaming\Pi Network\
Important files and folders:
stellar-core.cfg
as well as the Docker data or node volumes.
Depending on the installation, the actual data may additionally be located under:
C:\Users\<USER>\AppData\Roaming\Pi Network\docker_volumes\
This includes:
- buckets
- PostgreSQL data
- ledger data
- history data
Where to copy them under Linux?
In a Linux Docker setup, the data is typically copied to:
/opt/data
or into the mounted Docker volume directory.
In the Docker Compose example used here:
volumes:
- ./pi-node-data:/opt/data
the actual data directory on the Linux host is:
./pi-node-data
This then contains:
- PostgreSQL data
- buckets
- stellar-core configuration
- node data
The stellar-core.cfg typically belongs inside the container at:
/opt/stellar/core/etc/stellar-core.cfg
Why This Makes Sense
Internally, the Windows app handles:
- registration
- key generation
- API initialization
- linking with the Pi app
These processes are currently barely documented for pure Linux environments.
Final Working stellar-core.cfg
The critical settings:
PUBLIC_HTTP_PORT = true
HTTP_PORT = 11626
PEER_PORT = 31402
Important:
# HTTP_LOCAL_ONLY = false
do not set this explicitly.
Starting the Pi-Node
Time to start our Pi-Node on Linux:
docker compose up -d
Leave the Pi node alone for 15 minutes first, then start it up!
Verifying Synchronization
The most important test:
curl http://127.0.0.1:11626/info
Important values:
"state": "Synced!"
"ledger"
"authenticated_count"
This directly verifies:
- node online
- ledger current
- peers connected
- synchronization active
Important Insights from the Migration
1. WSL2 is Critical for PostgreSQL
Especially problematic:
- WAL files
- file locks
- permission management
2. Native Linux Docker Environments are Significantly More Stable
Fewer:
- permission problems
- file locks
- I/O issues
3. The Pi-Node is Internally More Complex than Normal Containers
The node contains:
- PostgreSQL
- Stellar Core
- Supervisor
- internal migrations
- history buckets
4. Many Errors Look Like Network Problems but are Actually Filesystem Problems
Typical symptoms:
- block 1
- no sync
- no API
- random restarts
are often caused by:
- corrupted databases
- permission issues
- inconsistent volumes
Monitoring with Uptime Kuma
Internally, the node was synchronized:
curl http://127.0.0.1:11626/info
Result:
"state" : "Synced!"
Nevertheless, Uptime Kuma remained permanently red.
The cause ultimately came down to exactly one single line:
HTTP_LOCAL_ONLY = false
After commenting it out:
# HTTP_LOCAL_ONLY = false
the API suddenly became reachable correctly.
This behavior shows:
The Pi-Node reacts sensitively to certain explicit flags, even if their configured value would logically appear correct.
Detailed Creation of the Monitor in Uptime Kuma
In newer Uptime Kuma versions, a simple HTTP monitor is sufficient.
Add Monitor
In Uptime Kuma:
Add New Monitor
Settings
Monitor Type
HTTP(s) - Search term
Friendly Name
Pi Node Sync
URL
http://127.0.0.1:11626/info
If Uptime Kuma runs inside a separate container, use the local Docker host IP instead:
http://192.168.x.x:11626/info
Keyword
Syncet!
Keyword
This allows Kuma to verify whether the text:
"state" : "Synced!"
Important
For the monitor to work, the node API must be reachable.
The decisive settings were:
# HTTP_LOCAL_ONLY = false
and additionally:
PUBLIC_HTTP_PORT = true
HTTP_PORT = 11626
as well as the Docker port mapping:
- "11626:11626"
Only after that could Uptime Kuma correctly retrieve the synchronization status.
Why Uptime Kuma is Only Partially Useful
Uptime Kuma works well for:
- HTTP reachability
- port checks
- simple status displays
However, for blockchain nodes it lacks:
- ledger lag
- peer quality
- sync status
- catchup progress
- quorum analysis
As a result, Kuma often appears “red” even though the node is technically functioning correctly.
Conclusion
Running a Pi-Node on Linux Docker is absolutely possible and is the more stable long-term solution compared to Windows + WSL2.
However, practical experience shows:
Internally, the Pi-Node behaves more like a packaged distributed system than a simple Docker container.
The most important success factors are:
- native Linux filesystems
- stable Docker volumes
- clean PostgreSQL data
- working HTTP configuration
- cautious updates
- and a one-time activation through the official Windows app
Once these points are properly implemented, the node runs stably, performs well, and is significantly easier to maintain than under WSL2.
Especially the combination of native Linux filesystems, Docker Compose, and a clean separation between node, database, and monitoring results in much greater long-term stability than classic WSL2 installations under Windows.
Anyone who wants to operate the node productively and permanently should therefore switch to a native Linux Docker environment as early as possible.

Support / Donation Link for the Channel
If my posts have been helpful or supported you in any way, I’d truly appreciate your support 🙏
#PiNode #Docker #Linux #PiNetwork #Blockchain #SelfHosting #Crypto #StellarCore