目录

1. 系统目标

本篇目标是在 Rock 5T 上完成 Docker 和 Docker Compose 的部署,为后续边缘网关多服务运行环境做准备。

后续 Rock 5T 计划运行的服务包括:

Rock 5T / RK3588
└── Docker Compose
    ├── Mosquitto:MQTT Broker
    ├── Node-RED:MQTT 调试与规则编排
    ├── Home Assistant:本地智能设备 UI
    ├── RoomEdge Core:自研边缘网关核心
    ├── MCP Server:后续给 AI Agent 调用
    └── AI Inference:后续接入 RKNN / NPU 推理

本篇完成后的验证目标:

1. Docker Engine 安装成功
2. Docker Compose Plugin 安装成功
3. Docker 服务可以正常启动
4. Docker 镜像可以正常拉取
5. Docker 容器可以正常运行
6. 普通用户可以执行 docker 命令

2. 当前环境

Rock 5T 通过 SSH 登录后,先检查系统环境。

检查命令:

cat /etc/os-release
uname -a
dpkg --print-architecture
lscpu | head -30
free -h
df -h
lsblk
docker --version || true
docker compose version || true
systemctl is-active docker || true

实际环境:

开发板:Rock 5T
芯片:Rockchip RK3588
系统:Debian GNU/Linux 12 bookworm
内核:Linux 6.1.84-8-rk2410
架构:arm64 / aarch64
内存:15GiB
根分区:115GB
剩余磁盘:约 86GB
Docker:未安装
Docker 服务状态:inactive

当前环境具备运行 Docker 多服务栈的基础条件。


3. Docker 是什么

Docker 是一种容器化平台,可以把应用及其运行依赖打包成镜像,并以容器的方式运行。

在 Rock 5T 边缘网关项目中,Docker 的作用是隔离不同服务的运行环境,例如:

Mosquitto 使用自己的容器环境
Node-RED 使用自己的容器环境
Home Assistant 使用自己的容器环境
自研 RoomEdge Core 使用自己的容器环境

这样做的好处是:

1. 避免不同服务之间的依赖冲突
2. 方便统一启动、停止和升级
3. 方便迁移到其他开发板或服务器
4. 方便开源项目复现环境
5. 方便后续通过 Docker Compose 管理整套服务

4. Docker Compose 是什么

Docker Compose 用于管理多个 Docker 容器。

它通过一个 compose.yaml 文件描述整套服务,例如:

services:
  mosquitto
  nodered
  homeassistant
  roomedge-core

后续只需要执行:

docker compose up -d

就可以一次性启动整套边缘网关服务。

在本项目中,Docker Compose 会作为 Rock 5T 边缘网关的基础部署方式。


5. 安装前环境检查

初始状态下,系统没有安装 Docker:

docker --version || true
docker compose version || true
systemctl is-active docker || true

输出:

bash: docker: command not found
bash: docker: command not found
inactive

说明当前需要安装:

Docker Engine
Docker CLI
containerd
Docker Buildx Plugin
Docker Compose Plugin

6. Docker 安装过程

先更新 apt 并安装基础工具:

sudo apt update
sudo apt install -y ca-certificates curl

创建 apt keyrings 目录:

sudo install -m 0755 -d /etc/apt/keyrings

原计划使用 Docker 官方源:

sudo curl -fsSL https://download.docker.com/linux/debian/gpg \
  -o /etc/apt/keyrings/docker.asc

但是这里遇到了网络问题。


7. Docker 官方源访问失败问题

问题现象

下载 Docker 官方 GPG key 时失败:

curl: (35) Recv failure: Connection reset by peer

继续执行权限修改命令时:

sudo chmod a+r /etc/apt/keyrings/docker.asc

报错:

chmod: cannot access '/etc/apt/keyrings/docker.asc': No such file or directory

原因分析

Docker 官方 GPG key 没有下载成功,所以 /etc/apt/keyrings/docker.asc 文件不存在。

如果此时继续添加 Docker 官方 apt 源,会导致后续 apt update 签名验证失败。

后续报错

添加 Docker 官方源后执行:

sudo apt update

报错:

The following signatures couldn't be verified because the public key is not available:
NO_PUBKEY 7EA0A9C3F273FCD8

E: The repository 'https://download.docker.com/linux/debian bookworm InRelease' is not signed.

继续安装 Docker:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

报错:

Package docker-ce is not available
Package docker-ce-cli is not available
Unable to locate package containerd.io
Unable to locate package docker-buildx-plugin
Unable to locate package docker-compose-plugin

这个问题不是 Docker 没有 arm64 包,而是 Docker apt 源没有被正确启用。


8. NodeSource 源干扰问题

执行 apt update 时,还出现了 NodeSource 源错误:

Could not connect to deb.nodesource.com:443 (127.0.0.1)

查看 apt 源目录:

ls /etc/apt/sources.list.d/

发现存在:

nodesource.sources

当前阶段暂时不需要 NodeSource,因此先临时禁用,而不是删除。

禁用命令:

sudo mkdir -p /etc/apt/sources.list.d/disabled

sudo mv /etc/apt/sources.list.d/nodesource.sources \
  /etc/apt/sources.list.d/disabled/nodesource.sources

后续需要恢复时:

sudo mv /etc/apt/sources.list.d/disabled/nodesource.sources \
  /etc/apt/sources.list.d/nodesource.sources

sudo apt update

9. 改用国内 Docker CE 镜像源

先清理之前失败的 Docker 源配置:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

重新创建 keyrings 目录:

sudo install -m 0755 -d /etc/apt/keyrings

下载 Docker GPG key:

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg \
  | sudo tee /etc/apt/keyrings/docker.asc > /dev/null

设置权限:

sudo chmod a+r /etc/apt/keyrings/docker.asc

添加 Docker CE apt 源:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://mirrors.aliyun.com/docker-ce/linux/debian
Suites: bookworm
Components: stable
Architectures: arm64
Signed-By: /etc/apt/keyrings/docker.asc
EOF

更新 apt:

sudo apt update

安装 Docker:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

10. 启动 Docker 服务

安装完成后,启动 Docker:

sudo systemctl enable docker
sudo systemctl start docker

查看 Docker 版本:

docker --version

输出:

Docker version 29.4.1, build 055a478

查看 Docker Compose 版本:

sudo docker compose version

输出:

Docker Compose version v5.1.3

查看 Docker 容器状态:

sudo docker ps

输出:

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

当前没有容器运行,这是正常状态。


11. Docker Hub 镜像拉取问题

安装完成后,尝试运行:

sudo docker run hello-world

输出:

Unable to find image 'hello-world:latest' locally

随后长时间无响应。

这个现象说明:

Docker 服务本身已经正常
但是从 Docker Hub 拉取镜像存在网络问题

因此需要配置 Docker 镜像加速。


12. 配置 Docker 镜像加速

创建 Docker daemon 配置文件:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}
EOF

重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

查看镜像源是否生效:

sudo docker info | grep -A 10 "Registry Mirrors"

输出:

Registry Mirrors:
 https://docker.1ms.run/
 https://docker.xuanyuan.me/
 https://docker.m.daocloud.io/

说明镜像加速配置已经生效。


13. 使用 Mosquitto 镜像验证 Docker

因为后续边缘网关项目需要 MQTT Broker,所以直接使用 Mosquitto 镜像验证 Docker 是否可用。

拉取镜像:

sudo docker pull eclipse-mosquitto:2

输出:

2: Pulling from library/eclipse-mosquitto
Pull complete
Status: Downloaded newer image for eclipse-mosquitto:2
docker.io/library/eclipse-mosquitto:2

运行 Mosquitto 帮助命令:

sudo docker run --rm eclipse-mosquitto:2 mosquitto -h

输出:

mosquitto version 2.1.2

mosquitto is an MQTT v5.0/v3.1.1 broker.

Usage: mosquitto [-c config_file] [-d] [-h] [-p port] [-v]

说明 Docker 已经可以正常:

1. 拉取镜像
2. 创建容器
3. 运行容器
4. 删除临时容器

14. 配置普通用户执行 Docker

默认情况下,执行 Docker 命令需要 sudo

为了后续开发方便,将当前用户加入 docker 用户组:

sudo usermod -aG docker $USER
newgrp docker

验证:

docker ps

输出:

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

说明当前用户已经可以直接执行 Docker 命令。

注意:

docker 用户组权限较高。
个人开发板上可以这样配置。
生产环境或公司服务器上需要谨慎使用。

15. 当前系统状态

当前 Rock 5T 上 Docker 环境状态:

Docker Engine:已安装
Docker Compose Plugin:已安装
Docker 服务:已启动
Docker 镜像加速:已配置
Mosquitto 镜像:已成功拉取
普通用户 docker 权限:已配置

当前验证命令:

docker --version
docker compose version
docker ps
docker images

当前已验证镜像:

eclipse-mosquitto:2

当前项目基础状态:

Rock 5T / RK3588
└── Docker
    └── 可运行 arm64 容器

后续边缘网关服务可以基于 Docker Compose 继续部署。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐