RK3576开发——Docker部署

文章目录

    • [1. 确认系统和网络](#1. 确认系统和网络)
    • [2. 更新软件包索引](#2. 更新软件包索引)
    • [3. 安装 Docker 与工具](#3. 安装 Docker 与工具)
    • [4. 把 Docker 数据放到 userdata](#4. 把 Docker 数据放到 userdata)
    • [5. 验证容器能力](#5. 验证容器能力)

1. 确认系统和网络

登录后执行:

bash 复制代码
cat /etc/os-release
ip -br addr
ip route

第一条确认正在操作 Ubuntu;后两条确认网卡、IP 和默认网关。安装 Docker 要下载软件包,没有默认路由时后续的 apt-get update 会失败。

本机实际结果是 Ubuntu 22.04.5 LTS,eth1192.168.0.102/24,默认网关为 192.168.0.1

2. 更新软件包索引

执行:

bash 复制代码
apt-get update

它只下载"可安装的软件版本"列表,不会安装软件。输出 Get: 表示正在下载;完成时应出现 Reading package lists... Done

本机对 ROS 2 软件源出现:

text 复制代码
EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>

这是 ROS 2 源签名过期。Docker 不依赖该源,Ubuntu 官方源仍可用,所以不要关闭签名校验。未来需要 ROS 2 时,再单独更新其签名密钥。

3. 安装 Docker 与工具

执行:

bash 复制代码
apt-get install -y docker.io docker-compose zram-tools jq smartmontools
  • docker.io 是运行容器的 Docker Engine。
  • docker-compose 用一个 Compose 文件管理多个容器。
  • zram-toolsjqsmartmontools 分别用于内存压缩、JSON 检查和磁盘健康检查。
  • -y 表示自动确认;首次学习时可去掉它,先看 APT 准备安装什么。

启动 Docker 并设为开机启动:

bash 复制代码
systemctl enable --now docker
systemctl is-enabled docker
systemctl is-active docker
docker --version
docker-compose --version

本机实际返回:

text 复制代码
enabled
active
Docker version 29.1.3, build 29.1.3-0ubuntu3~22.04.2
docker-compose version 1.29.2, build unknown

Ubuntu 22.04 源没有 docker-compose-plugin,因此当前使用 docker-compose,不是 docker compose。后续 Compose 文件暂时保持 1.29 兼容语法。

4. 把 Docker 数据放到 userdata

先确认 /userdata 已是独立分区:

bash 复制代码
findmnt /userdata

再创建 Docker 配置:

bash 复制代码
mkdir -p /etc/docker /userdata/docker
printf '%s\n' \
  '{' \
  '  "data-root": "/userdata/docker",' \
  '  "log-driver": "local",' \
  '  "log-opts": {"max-size": "10m", "max-file": "3"}' \
  '}' > /etc/docker/daemon.json
systemctl restart docker

data-root 决定镜像、容器和卷的保存位置;把它放在 /userdata 可避免根分区被 HA 数据填满。日志设置限制每个容器的日志为 3 个、每个最多 10MB,避免 eMMC 被日志耗尽。

验证:

bash 复制代码
docker info --format 'root={{.DockerRootDir}} driver={{.Driver}} logging={{.LoggingDriver}}'

本机实际返回:

text 复制代码
root=/userdata/docker driver=overlayfs logging=local

若仍显示 /var/lib/docker,先用 cat /etc/docker/daemon.json 检查 JSON,再用 systemctl status docker 查看错误。

5. 验证容器能力

通常执行:

bash 复制代码
docker run --rm hello-world

成功时会下载测试镜像并输出 Hello from Docker!。本机未能下载,因为:

text 复制代码
curl: (28) Failed to connect to registry-1.docker.io port 443

这不是 Docker 服务故障,而是 Docker Hub 网络不可达。灾备机不应依赖在线拉取镜像:应从 3588 导出已验证镜像,再导入 RK3576:

bash 复制代码
# 在 3588:
docker image save -o roomedge-images.tar <镜像1> <镜像2> <镜像3> <镜像4>

# 在 RK3576:
docker load -i roomedge-images.tar
docker image ls
相关推荐
随便做点啥2 小时前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
To_OC10 小时前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
tryCbest14 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器
开始学AI16 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器
做前端的娜娜子17 小时前
Docker 常用命令全梳理:从镜像拉取到容器编排
docker·容器·掘金·金石计划
m0_5791466519 小时前
关于Docker Desktop导致C盘空间异常占用的排查与根治方案
运维·docker·容器
郝开21 小时前
Docker Compose 本地环境搭建:kkFileView
运维·docker·容器
jufeng13071 天前
【系列:TDengine 工业物联网实战:从零搭起可运行系统 · 第 10 篇】
docker·时序数据库·tdengine·高可用
国际云,接待1 天前
Docker 容器一直显示 unhealthy:从 Healthcheck 输出到依赖故障的完整排查
运维·docker·容器