Docker so konfigurieren, dass SD-Karte als Data Root verwendet wird (z. B. WP400 mit PLCVisu)

Dieser Leitfaden erklärt, wie man den Speicher von Docker auf eine SD-Karte umleitet, ideal für Geräte mit begrenztem internem Speicher (wie WAGO WP400). Sie umfasst Vorbereitung, kontinuierliche Montage und strukturierte Fehlerbehebung.

Softwareanforderungen

  1. Docker
    WAGO Docker Installationsanleitung (Suche nach WP400 Docker IPK)

  2. PLCVisu Software (.ipk)
    WAGO PLCVisu Download-Seite

  3. Root-Zugriff
    Über SSH (ssh root@<wp400-ip>) oder serielle Terminale

Hardwareanforderungen

  1. SD-Karte oder SSD mit USB-Adapter
    • Mindestklasse 10 oder UHS-I
    • Mindestens 8 GB (16+ GB empfohlen)
    • Formatiert als ext4 oder vfat (Linux-kompatibel)

Voraussetzungen

Mount SD-Karte und Docker-Speicher vorbereiten

1. Identifizieren Sie das SD-Karten-Gerät

Lauf:

lsblk

oder:

dmesg | grep sd

Suchen Sie nach einem Gerät wie /dev/mmcblk0p1 oder /dev/sda1

### 2. Format the SD Card (if needed – this erases all data)

mkfs.ext4 /dev/sda1

Passen Sie den Gerätenamen an Ihr System an
Du kannst mkfs.vfat verwenden, falls ext4 nicht unterstützt wird

### 3. Create Mount Point and Mount the SD Card

mkdir -p /mnt/sdcard
mount /dev/sda1 /mnt/sdcard

Überprüfen Sie mit: https://doc.plcvisu.cloud/de/downloads.html

df -h

4. Docker Data Directory bereiten

mkdir -p /mnt/sdcard/docker
chmod 711 /mnt/sdcard/docker

5. Stoppe Docker, bevor du die Konfiguration änderst

/etc/init.d/docker stop

6. Backup bestehender Docker-Daten (optional)

mv /var/lib/docker /var/lib/docker.backup

7. Docker so konfigurieren, dass er die SD-Karte als Datenwurzel verwendet

Bearbeiten oder erstellen:

vi /etc/docker/daemon.json

Einfügen:

{
  "data-root": "/mnt/sdcard/docker"
}

Speichern und schließen.

8. Docker von vorne starten

/etc/init.d/docker start

9. Docker-Speicherpfad überprüfen

docker info | grep "Docker Root Dir"

Erwartetes Ergebnis:

Docker Root Dir: /mnt/sdcard/docker

Optional: Mount nach Neustart persistent machen

Edit /etc/fstab:

/dev/sda1 /mnt/sdcard ext4 defaults 0 2

⚠️ Stellen Sie sicher, dass die SD-Karte beim Booten immer verfügbar ist
Verwenden Sie zum Testen mount -a

Nach-Neustart-Check

Nach dem Neustart:

df -h | grep /mnt/sdcard
docker info | grep "Docker Root Dir"

Wenn du auf /var/lib/docker zurückfällst, → fstab und Docker-Boot-Timing überprüfst

Fehlerbehebungsanleitung

Symptom Ursache Lösung
Docker Root Dir ist immer noch /var/lib/docker Die SD-Karte wurde nicht früh genug montiert Verzögere den Start von Docker oder benutze mount --bind
mount: wrong fs type Falsches Dateisystemformat Umformatieren mit mkfs.ext4
Kein Platz mehr auf dem Gerät SD-Karte zu klein / falsche Halterung Überprüfe mit df -h, vergrößere SD oder befestige rechts
Erlaubnis verweigert auf /mnt/sdcard/docker Falsche Berechtigungen Run chmod 711 /mnt/sdcard/docker
Docker startet nicht Konfigurationsfehler oder fehlender Ordner Schau dir /etc/docker/daemon.json und die Logs an

Abschließende Anmerkungen

  • Stoppe Docker immer, bevor du die Konfiguration änderst
  • Entfernen Sie die SD-Karte nicht, während Docker läuft
  • Für kritische Anwendungen: verwenden Sie Industrie-SD oder externe SSD
  • Sie können sauber zurücksetzen, indem Sie /var/lib/docker.backup wiederherstellen und daemon.json bearbeiten

⚠️ Stelle sicher, dass die SD-Karte vor dem Start von Docker beim Booten montiert ist.
Wenn die Montage zu spät kommt, wird Docker neu initialisieren in /var/lib/docker.

Lade- und Ausführen des Node-RED-Docker-Bildes auf WP400

Mit dieser Methode können Sie Node-RED auf einem WP400 ohne Internetzugang bereitstellen, indem Sie eine vorinstallierte .tar Docker-Bilddatei verwenden.

Anstatt von Docker Hub zu laden, laden Sie die vorbereitete Image-Datei herunter:

???? Download node-red-arm.tar

Speichere die Datei lokal auf deinem Entwicklungs-PC.

2. Übertragen Sie die Docker-Image-Datei auf die WP400 SD-Karte (eingebundenes Verzeichnis).

Anstatt das Docker-Image in den temporären Speicher (/tmp) zu verschieben, können Sie es direkt auf die im WP400 eingesteckte SD-Karte speichern. Dies ist besonders nützlich, wenn das Image groß ist und Sie den internen Speicher nicht erschöpfen möchten.

Windows

Option A – WinSCP (GUI):

  1. Installieren Sie WinSCP (https://winscp.net).
  2. Stellen Sie eine Verbindung zum WP400 über SCP her (root@<wp400-ip>).
  3. Navigieren Sie zum Verzeichnis der eingebundenen SD-Karte, üblicherweise /mnt/sdcard.
  4. Ziehen Sie die Datei node-red-arm327l.tar per Drag & Drop in das Verzeichnis /mnt/sdcard.

Option B – Befehlszeile mit PuTTY (pscp):

pscp C:pathtonode-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard

macOS

Nutzen Sie das Terminal:

scp ~/Downloads/node-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard

Linux

Verwenden Sie ein beliebiges Terminal:

scp /path/to/node-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard

USB-Stick (Alternative für alle Betriebssysteme)

Falls die Übertragung über das Netzwerk nicht möglich ist:

  1. Kopieren Sie die Datei auf einen USB-Stick.
  2. Schließen Sie den USB-Stick an das WP400 an.
  3. Verschieben Sie die Datei auf dem WP400 auf die SD-Karte.
    mount /dev/sda1 /mnt/usb
    cp /mnt/usb/node-red-arm327l.tar /mnt/sdcard
    umount /mnt/usb

Sobald die Datei unter /mnt/sdcard gespeichert ist, fahren Sie mit Schritt 3 fort: Docker-Image von der SD-Karte laden

Sobald die Datei unter /tmp verfügbar ist, fahren Sie mit Schritt 3 fort: Docker-Image auf WP400 laden

3. Docker-Image auf WP400 laden

Stellen Sie eine SSH-Verbindung zu Ihrem WP400 her und führen Sie folgenden Befehl aus:

docker load -i /tmp/node-red-arm327l.tar

Dadurch wird das Image in Ihre lokale Docker-Registry geladen.

4. Den Node-RED-Container ausführen

docker run -it -d -p 1880:1880 -v node_red_data:/data --name wago-nodered --restart unless-stopped node-red-arm327l:latest

✔ Stellen Sie sicher, dass der Image-Name (node-red-arm327l:latest) mit dem von docker images angezeigten Namen übereinstimmt.
???? Um die SD-Karte für persistente Daten zu verwenden, ersetzen Sie node_red_data durch einen vollständigen Pfad wie /mnt/sdcard/nodered.

Zugriff auf Node-RED

Im Browser öffnen:

http://<wp400-ip>:1880

Sie verfügen nun über eine voll funktionsfähige Node-RED-Instanz, die auf WP400 läuft, ohne dass ein direkter Internetzugang erforderlich ist.

http://<wp400-ip>:1880
/mnt/sdcard/nodered
node_red_data
docker images
node-red-arm327l:latest
docker run -it -d -p 1880:1880 -v node_red_data:/data --name wago-nodered --restart unless-stopped node-red-arm327l:latest
docker load -i /tmp/node-red-arm327l.tar
/tmp
/mnt/sdcard
mount /dev/sda1 /mnt/usb cp /mnt/usb/node-red-arm327l.tar /mnt/sdcard umount /mnt/usb
scp /path/to/node-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard
scp ~/Downloads/node-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard
pscp C:pathtonode-red-arm327l.tar root@<wp400-ip>:/mnt/sdcard
/mnt/sdcard
node-red-arm327l.tar
/mnt/sdcard
root@<wp400-ip>
/tmp
.tar
.tar
/var/lib/docker
daemon.json
/var/lib/docker.backup
/etc/docker/daemon.json
chmod 711 /mnt/sdcard/docker
/mnt/sdcard/docker
Erlaubnis verweigert
df -h
Kein Platz mehr auf dem Gerät
mkfs.ext4
mount: wrong fs type
mount --bind
/var/lib/docker
Docker Root Dir
fstab
/var/lib/docker
df -h | grep /mnt/sdcard docker info | grep "Docker Root Dir"
mount -a
/dev/sda1 /mnt/sdcard ext4 defaults 0 2
/etc/fstab
Docker Root Dir: /mnt/sdcard/docker
docker info | grep "Docker Root Dir"
/etc/init.d/docker start
{ "data-root": "/mnt/sdcard/docker" }
vi /etc/docker/daemon.json
mv /var/lib/docker /var/lib/docker.backup
/etc/init.d/docker stop
mkdir -p /mnt/sdcard/docker chmod 711 /mnt/sdcard/docker
df -h
mkdir -p /mnt/sdcard mount /dev/sda1 /mnt/sdcard
ext4
mkfs.vfat
mkfs.ext4 /dev/sda1
/dev/sda1
/dev/mmcblk0p1
dmesg | grep sd
lsblk
vfat
ext4
ssh root@<wp400-ip>