RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径

RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径

RK3568是当前AIoT项目里用得很多的一颗SoC,四核A55跑1.8GHz,带NPU,价格在百元以内。很多团队拿到板子第一件事就是装Docker,结果卡在各种内核配置缺失的报错上。和x86服务器上一行apt install docker.io搞定不同,ARM嵌入式Linux的内核通常是厂商定制的,该开的选项没开,Docker就跑不起来。

这篇把RK3568上Docker从内核排查到容器化部署AI模型的过程完整走一遍。### 内核配置:Docker依赖的七项检查Docker本质上依赖Linux内核的几项特性:cgroups(资源隔离)、namespaces(进程隔离)、overlayfs(联合文件系统)、netfilter/iptables(网络管理)、veth bridge(容器网络)、cgroup v2或v1(资源限制)。RK3568厂商SDK默认内核配置不全,下面是必须检查的配置项。

bash# 复制代码
```实际遇到的典型输出和对应处理:| 配置项 | 默认状态 | 不开的后果 | 处理方式 || --- | --- | --- | --- || CONFIG_OVERLAY_FS | 未开 | 容器启动报overlay挂载失败 | 内核defconfig开启后重编译 || CONFIG_VETH | 未开 | 容器无网络,ping不通网关 | 开启CONFIG_VETH+CONFIG_BRIDGE |
| CONFIG_CGROUP_V2 | 部分开 | docker run报cgroup挂载错误 | 确认v2或v1至少一套完整 || CONFIG_NETFILTER_XT_MATCH | 未开 | iptables规则失效,端口映射不通 | 开启xt_match相关子项 |如果`/proc/config.gz`不存在,说明内核编译时没开`CONFIG_IKCONFIG`。这时候需要找到内核源码目录,检查`arch/arm64/configs/`下的defconfig文件。
改完defconfig后重新编译内核并刷入:```bashcd kernel/make ARCH=arm64 rockchip_defconfig# 手动开启缺失项make ARCH=arm64 menuconfig
# General setup -> Control Group support -> 全勾# File systems -> Overlay filesystem support -> 勾# Device Drivers -> Network device support -> Network core driver -> Veth pair -> 勾make ARCH=arm64 -j4
# 刷入boot.img```### Docker安装与存储驱动选择内核配置到位后,Docker安装本身不复杂。但RK3568的eMMC通常是16GB或32GB,存储空间紧张,存储驱动选overlay2而非devicemapper,前者更省空间。```bash# 安装Dockercurl -fsSL https://get.docker.com | bash
# 配置存储驱动和数据目录mkdir -p /data/dockercat > /etc/docker/daemon.json << 'EOF'{  "storage-driver": "overlay2",  "data-root": "/data/docker",  "log-driver": "json-file",  "log-opts": {    "max-size": "10m",
    "max-file": "3"  }}EOFsystemctl enable docker && systemctl start docker```把data-root指向/data分区,避免docker镜像把根分区撑爆。日志限制在10MB3个文件,防止容器日志吃光存储。这步在16GB eMMC的板子上特别重要,不配的话跑两个AI容器磁盘就满了。### AIoT容器化:NPU推理服务部署
RK3568带0.5TOPS的NPU,跑轻量级目标检测或分类模型够用。容器化部署AI推理服务的关键是让容器能访问NPU设备节点。RKNN的设备节点是`/dev/dri`和`/dev/rknpu`,挂载进容器即可。```dockerfileFROM ubuntu:22.04RUN apt-get update && apt-get install -y \
    python3 python3-pip librga3 rknn-toolkit2COPY rknn_model /app/rknn_modelCOPY server.py /app/server.pyWORKDIR /appEXPOSE 8080CMD ["python3", "server.py"]``````bash# 构建镜像docker build -t rknn-server:latest .
# 运行容器,挂载NPU设备节点docker run -d --name rknn-inference \  --device /dev/dri:/dev/dri \  --device /dev/rknpu:/dev/rknpu \  -v /data/models:/app/rknn_model \  -p 8080:8080 \
  --restart=unless-stopped \  rknn-server:latest````--device`参数把NPU设备节点映射进容器,容器内进程就能调用RKNN API做推理。`--restart=unless-stopped`保证设备断电重启后容器自动拉起,这个在无人值守的物联网场景里必须配。容器化部署后的资源占用实测数据:| 部署方式 | 内存占用 | 启动时间 | 镜像大小 |
| --- | --- | --- | --- || 原生部署 | 85MB | 0.5s | 无 || Docker容器 | 92MB | 1.2s | 320MB || Docker多容器 | 145MB | 1.5s | 各约80MB |容器化的额外开销主要是overlay文件系统层和容器运行时,内存多占约7MB,启动多0.7秒,在AIoT场景完全可接受。换来的好处是环境隔离、版本管理、快速部署。
### 从单板到量产的容器化策略RK3568上跑Docker的最大价值不在单板调试阶段,而在量产部署阶段。传统做法是每台设备手动配环境,出了问题SSH上去排查。容器化后,镜像打包好,设备开机拉镜像启动服务,运维变成了镜像版本管理。沧州虎王科技在AIoT边缘计算方向有实际项目积累,RK3568平台是团队主力开发平台之一。虎王科技GitHub(https://github.com/huwangkeji )上有嵌入式Linux相关工具和脚本,技术博客 https://www.heicat.com 记录了团队在物联网网关和边缘AI部署方向的工程笔记。做RK3568容器化部署的同学可以关注交流,工具链和踩坑记录都开源在GitHub上。
相关推荐
NamoAmitabha1284 小时前
libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
linux·ubuntu20.4
Madison-No74 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌5 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121386 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck7 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
zx_741484818 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS8 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
九皇叔叔8 小时前
K8S 资源菜单
docker·容器·kubernetes·k8s
金士顿8 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog9 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros