容器部署和使用指南

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


Quectel Pi(RK3576)上使用 Docker 部署和管理容器。当前连接的开发板(M2 Debian 13 trixie)验证为 Docker 26.1.5,内核已内置容器所需配置(overlay2 存储、addrtype 等),仅需切换 iptables 后端即可开箱即用。

容器特点

  • 易管理。 轻量级容器化技术,使用 Docker 命令管理容器和镜像,依赖隔离,简化部署流程。

  • 跨平台。 支持 Debian、Ubuntu 等主流发行版,可在多种架构(x86 / ARM)上运行和部署容器。

  • 可移植性。 通过 Dockerfile 和镜像实现环境一致性,便于在不同机器上快速迁移和部署。

  • 高效资源利用。 基于容器化技术,共享主机内核,资源占用低,启动速度快,适合微服务架构。

安装与确认

Debian 13 中 docker.io 包仅包含守护进程,命令行工具在独立的 docker-cli 包中,需一并安装。

sudo apt update
sudo apt install -y docker.io docker-cli
docker --version
docker info

终端输出类似如下信息表示安装成功:

Docker version 26.1.5+dfsg1, build a72d7cd
Server Version: 26.1.5+dfsg1
Storage Driver: overlay2

命令

用途

docker pull <镜像>

拉取镜像

docker run <镜像> <命令>

运行容器

docker ps [-a]

查看运行中(或全部)容器

docker exec -it <容器> sh

进入容器终端

docker logs <容器>

查看容器日志

docker stop/start/rm <容器>

停止 / 启动 / 删除容器

docker images

查看本地镜像

docker system prune

清理未使用的镜像与容器

配置 iptables 后端

RK3576 内核未启用 nftables 兼容层(CONFIG_NFT_COMPAT),Docker 守护进程在默认 nf_tables 模式下无法创建 NAT 规则,需切换到 legacy 后端。先切换再启动 Docker,避免启动失败残留规则:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
iptables --version   # 输出末尾应为 (legacy)
sudo systemctl enable --now docker

若此前已在 nf_tables 模式下启动过 Docker 并失败,可能残留丢弃转发的 nft 规则(容器可运行但无法联网),清理后重启 Docker 即可:

sudo apt install -y nftables
sudo nft flush ruleset
sudo systemctl restart docker

配置镜像源

目前国内用户无法直接访问 Docker Hub(DNS 污染导致拉取超时或证书错误),需要配置 Docker 镜像源。编辑 /etc/docker/daemon.json(不存在则新建):

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://dockerproxy.net"
  ]
}
EOF
sudo systemctl restart docker
docker info   # Registry Mirrors 栏显示配置的源

镜像源地址可能变动,拉取失败时更换为其他可用源(可搜索「docker 镜像加速」获取最新地址)。

验证容器

docker pull busybox
docker run --rm busybox echo "Hello from Docker container"
docker run --rm busybox ping -c 3 223.5.5.5
docker run -d -p 8080:80 --name web busybox httpd -f -p 80
curl http://$(hostname -I | awk '{print $1}'):8080/
Hello from Docker container
PING 223.5.5.5 (223.5.5.5): 56 data bytes
3 packets transmitted, 3 packets received, 0% packet loss

端口映射由 Docker 自动生成 DNAT 规则,-p 8080:80 后通过主机 8080 端口即可访问容器,无需手动配置。

添加访问权限

将当前用户加入 docker 组,之后执行 docker 命令无需 sudo:

sudo usermod -aG docker $USER

重新登录(或执行 newgrp docker)后生效,验证:

docker ps

常用命令

# 后台运行,重启设备后自动恢复
docker run -d --restart unless-stopped --name myapp busybox sleep 3600
# 查看容器 IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' myapp
# 进入容器
docker exec -it myapp sh

镜像管理

docker images                        # 查看本地镜像
docker pull nginx:latest             # 拉取镜像
docker rmi nginx                     # 删除镜像
docker tag nginx myapp:1.0           # 打标签
docker save -o nginx.tar nginx       # 导出镜像为文件
docker load -i nginx.tar             # 从文件导入镜像

容器生命周期

docker run -d --name web nginx       # 后台运行
docker ps                            # 查看运行中容器
docker ps -a                         # 查看全部(含已停止)
docker logs -f web                   # 跟随查看日志
docker stop web && docker start web  # 停止 / 启动
docker rm web                        # 删除容器
docker exec -it web bash             # 进入容器
docker inspect web                   # 查看容器详情

数据持久化

容器删除后其内部数据会丢失,需通过卷(volume)或目录挂载持久化数据。

卷挂载(推荐)

docker volume create mydata                     # 创建卷
docker run -d -v mydata:/data --name app nginx  # 挂载卷到容器
docker volume ls                                # 查看卷
docker volume rm mydata                         # 删除卷

目录挂载

将主机目录直接映射到容器,适合配置文件和开发调试:

docker run -d -v /home/pi/app:/app --name app nginx

构建自定义镜像

通过 Dockerfile 定义应用环境和启动命令,构建可复用的自定义镜像:

mkdir myapp && cd myapp
cat > Dockerfile <<'EOF'
FROM python:3.11-slim
WORKDIR /app
COPY . /app
CMD ["python", "app.py"]
EOF
docker build -t myapp:1.0 .
docker run -d -p 8000:8000 --name myapp myapp:1.0

版本差异

功能

本平台写法

其他平台常见写法

iptables 后端

iptables-legacy(内核未启用 NFT_COMPAT)

nf_tables(默认)

存储驱动

overlay2(内核内置 OVERLAY_FS)

overlay2 / fuse-overlayfs

docker CLI 包

docker-cli(Debian 13 起独立包)

包含在 docker.io(旧版 Debian)

端口映射

docker run -p 自动配置

同左

注意事项

  • 必须先切换 iptables-legacy 再启动 Docker,否则守护进程启动失败。

  • 国内环境访问 Docker Hub 可能超时或失败,需在 /etc/docker/daemon.json 配置 registry-mirrors 镜像源。

  • 容器可运行但无法联网时,优先检查 nft flush ruleset 清理残留规则。

  • 将当前用户加入 docker 组可免 sudo 执行:sudo usermod -aG docker $USER(重新登录后生效)。