配置 Docker 使 SD 卡作为数据根(例如 WP400 搭配 PLCVisu)

本指南解释了如何重定向Docker的存储到SD卡,非常适合内部内存有限的设备(如WAGO WP400)。它包括准备、持续安装和结构化的故障排除。

软件需求

  1. Docker
    WAGO Docker 安装指南 (搜索WP400 Docker IPK)

  2. PLCVisu 软件 (.ipk)
    WAGO PLCVisu 下载页面

  3. 根访问
    通过SSH (ssh root@<wp400-ip>) 或串口终端

硬件需求

  1. SD卡或带USB适配器的SSD
    • 最低等级为10级或UHS-I级
    • 至少8 GB(建议16+ GB)
    • 格式为 ext4vfat(Linux兼容)

前提条件

挂载SD卡并准备Docker存储

1.识别SD卡设备

跑步:

lsblk

或者:

dmesg | grep sd

找类似/dev/mmcblk0p1/dev/sda1这样的设备

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

mkfs.ext4 /dev/sda1

调整设备名称以匹配你的系统
如果 ext4不支持,可以使用mkfs.vfat

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

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

请通过以下网站验证:https://doc.plcvisu.cloud/cn/downloads.html

df -h

4. 准备Docker Data Directory

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

5. 在更改配置前先停止使用 Docker

/etc/init.d/docker stop

6. 备份现有的 Docker 数据(可选)

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

7. 配置 Docker 将 SD 卡作为数据根节点使用

编辑或创建:

vi /etc/docker/daemon.json

插入:

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

保存并关闭。

8. 重新启动 Docker

/etc/init.d/docker start

9. 验证 Docker 存储路径

docker info | grep "Docker Root Dir"

预期结果:

Docker Root Dir: /mnt/sdcard/docker

可选:让挂载在重启后保持持久

编辑 /etc/fstab:

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

⚠️ 确保启动时SD卡始终可用
使用mount -a来测试

重启后检查

重启后:

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

如果是退回为/var/lib/docker,→检查 fstab和Docker启动时序

故障排查指南

症状 原因
Docker Root Dir 仍然是 /var/lib/docker SD卡安装得不够早 延迟 Docker 启动或使用 mount --bind
mount: wrong fs type 错误的文件系统格式 mkfs.ext4格式化
设备上没有剩余空间 SD卡太小/安装错误 df -h 检查一下,调整标清大小或正确安装
/mnt/sdcard/docker权限被拒绝 错误权限 chmod 711 /mnt/sdcard/docker
Docker 无法启动 配置错误或缺少文件夹 检查/etc/docker/daemon.json和日志

最后注释

  • 修改配置前请务必停止 Docker
  • 运行 Docker 时不要取出 SD 卡
  • 对于关键应用:使用工业级SD卡或外置固态硬盘
  • 你可以通过恢复/var/lib/docker.backup并编辑daemon.json来干净地恢复

⚠️ 确保启动时 Docker 启动前 SD 卡已挂载。
如果挂载太晚,Docker 会在 /var/lib/docker 中重新初始化。

在WP400上加载并运行Node-RED Docker Image。

这种方法允许你在没有互联网接入的情况下,使用预先下载的 .tar Docker 映像文件,在 WP400 上部署 Node-RED。

1.下载 Docker 镜像.tar文件(来自链接)

不要直接从 Docker Hub 获取,而是下载准备好的镜像文件:

???? 下载 node-red-arm.tar

把文件保存在你的开发电脑上。

2. 将 Docker 映像文件传输到 WP400 SD 卡(挂载目录)

你可以直接把 Docker 镜像转移到临时内存(/tmp),而是直接放在挂载在 WP400 上的 SD 卡上。这在图像较大且想避免内部存储耗尽时尤其有用。

选项A – WinSCP(图形界面):

  1. 安装 [WinSCP](https://winscp.net)。
  2. 使用 SCP (root@<wp400-ip>)连接到 WP400。
  3. 导航到挂载的SD卡目录,通常是 /mnt/sdcard
  4. node-red-arm327l.tar文件拖拽到“/mnt/sdcard”中。

选项B——带PuTTY(pscp)的命令行:

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

macOS

使用终端:

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

Linux

使用任何终端:

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

USB闪存盘(适用于所有作系统的替代方案)

如果无法通过网络传输:

  1. 将文件复制到U盘。
  2. 将USB插入WP400。
  3. 在WP400上,将其移到SD卡:
    mount /dev/sda1 /mnt/usb
    cp /mnt/usb/node-red-arm327l.tar /mnt/sdcard
    umount /mnt/usb

文件存储在 /mnt/sdcard下后,继续步骤3:从SD卡加载Docker镜像
一旦文件在/tmp下可用,继续步骤3:在WP400上加载Docker Image

3. 在WP400上加载Docker镜像

SSH连接到你的WP400,运行:

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

这会把镜像加载到你的本地 Docker 注册表中。

4. 运行Node-RED容器

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

✔ 确保镜像名(node-red-arm327l :latest)和docker images显示的一致。
????要用SD卡保存持久数据,可以把node_red_data替换成像/mnt/sdcard/nodered这样的完整路径。

访问Node-RED

在浏览器中打开:

http://<wp400-ip>:1880

你现在拥有了一个功能齐全的Node-RED实例,运行在WP400上,无需直接上网。

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
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
df -h
设备上没有剩余空间
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
mkfs.vfat
ext4
mkfs.ext4 /dev/sda1
/dev/sda1
/dev/mmcblk0p1
dmesg | grep sd
lsblk
vfat
ext4
ssh root@<wp400-ip>