iStoreOS Docker 教程:3 种安装、4 种网络、3 种磁盘位置

AI 摘要997笔记AI

iStoreOS 跑 Docker 的关键是选对安装方式、数据目录和网络模式。文章给出商店、opkg、离线三种安装方式,建议数据放外置盘 /mnt/data/docker,网络按需选 bridge 端口映射或 macvlan,并用 nginx 容器完整验证。

此内容由AI根据文章内容自动生成。

iStoreOS 上跑 Docker,最容易卡住的不是“怎么装”,而是三件事:装在哪、数据放哪、网络怎么通。装法有好几种,网络模式有好几种,Docker 根目录也有不同放法,选错了要么空间很快爆,要么容器局域网访问不到。

这篇按“3 种安装方式 + 4 种网络模式 + 3 种磁盘位置”来讲,每一步都给命令和界面路径,最后用 nginx 容器做一次完整验证。

一、先确认你的环境

SSH 登录 iStoreOS,先看磁盘和 Docker 状态:

df -h
lsblk
block info
docker info 2>/dev/null | head

如果 docker info 报 command not found,说明还没装 Docker,从下一节开始。本文以 iStoreOS 24.10(opkg 包管理)为例;25.12 已切换到 apk,命令里的 opkg 要换成 apk,思路一样。

二、3 种 Docker 安装方式

方式 1:iStore 应用商店安装(推荐)

iStoreOS 后台 → iStore 应用商店 → 搜索 Docker → 安装 Docker 和 Docker Manager(LuCI 界面)。

装完后左侧菜单会出现“Docker”,里面有“概览 / 容器 / 镜像 / 网络 / 配置”等页面。这是最省事的方式,依赖和界面一次到位。

方式 2:命令行 opkg 安装

适合没有 iStore 或想自己控制版本的场景:

opkg update
opkg install dockerd luci-app-dockerman
/etc/init.d/dockerd enable
/etc/init.d/dockerd start
docker info

如果提示缺少依赖,按提示补装 kmod-* 和 libnetwork 相关包。装完刷新 LuCI,菜单里会出现 Docker。

方式 3:离线 .run / ipk 安装

适合路由器不能联网、或 iStore 里没有对应架构包的情况。下载与你的 iStoreOS 版本、架构匹配的包,然后:

# .run 包
sh docker-package.run

# .ipk 包
opkg install ./dockerd_*.ipk ./luci-app-dockerman_*.ipk

离线安装最容易遇到依赖缺失,建议优先用 iStore 或 opkg 在线安装。

安装方式 难度 适合谁
iStore 商店 低 绝大多数用户,推荐
opkg 命令 中 想控制版本、没有 iStore
离线 .run / ipk 中高 不能联网、特殊架构

三、3 种磁盘位置:Docker 数据放哪

Docker 的镜像、容器、卷都放在 data_root 目录。这个目录放在系统盘,还是外置盘,直接决定你能跑多少容器。

位置 1:系统盘默认目录

默认通常是 /opt/docker,具体以 Docker → 配置 → Docker 根目录 显示的为准。

优点是零配置;缺点是 iStoreOS 根分区通常不大,几个大镜像就能把系统盘撑满,甚至影响系统更新。只适合轻量、临时测试。

位置 2:外置盘挂载到 /mnt/data(推荐)

给 iStoreOS 加一块数据盘(PVE/ESXi 加虚拟磁盘,或物理机加 SSD),挂载到 /mnt/data,再把 Docker 根目录设为 /mnt/data/docker。

分区、格式化、挂载:

opkg update
opkg install parted e2fsprogs block-mount
parted -s /dev/sdb mklabel gpt mkpart data ext4 0% 100%
mkfs.ext4 -L data /dev/sdb1
mkdir -p /mnt/data
block info /dev/sdb1

在 LuCI 的“系统 → 挂载点”里添加挂载,或者在 /etc/config/fstab 写入:

config mount
    option uuid '你的-UUID'
    option target '/mnt/data'
    option enabled '1'

挂载并确认:

mount -a
df -h /mnt/data
mkdir -p /mnt/data/docker

然后改 Docker 根目录:

  • 界面:Docker → 配置 → Docker 根目录,填 /mnt/data/docker,保存并重启 Docker
  • 命令:编辑 /etc/config/dockerd,设置 option data_root '/mnt/data/docker',然后 /etc/init.d/dockerd restart

验证:

docker info | grep -i "root dir"
df -h /mnt/data

位置 3:独立分区 / 独立 SSD 专供 Docker

如果你跑大量镜像、数据库、下载容器,建议单独一块 SSD 或独立分区,挂载到 /mnt/docker,Docker 根目录直接设为 /mnt/docker。

步骤和位置 2 一样,只是挂载点换成 /mnt/docker。独立盘的好处是:系统盘和 Docker 数据彻底分离,重装系统不影响容器数据,性能也更稳定。

迁移已有 Docker 数据:先停 Docker,复制数据,再改 data_root:

/etc/init.d/dockerd stop
mkdir -p /mnt/data/docker
tar -C /opt/docker -cf - . | tar -C /mnt/data/docker -xf -
# 改 data_root 后
/etc/init.d/dockerd start

注意:不要把 Docker 根目录设成 /data/docker 这类会被 iStoreOS 自动挂成 overlayfs 的目录,容易出现“只有 2GB、重启就回退”的问题。统一用 /mnt/data/docker 或 /mnt/docker,并确保 fstab 已启用开机挂载。

磁盘位置 容量 风险 适合场景
系统盘 /opt/docker 小 容易撑满系统盘 临时测试
外置盘 /mnt/data/docker 大 低 绝大多数用户,推荐
独立分区 /mnt/docker 大 低 重度容器、数据库、下载

四、4 种网络配置方式

方式 1:默认 bridge + 端口映射(最常用)

Docker 默认创建 docker0 网桥,容器拿到 172.17.0.0/16 的地址,通过端口映射对外提供服务:

docker run -d --name web -p 8080:80 nginx:alpine

浏览器访问 http://iStoreOS的IP:8080。优点是简单、隔离好;缺点是要记端口,容器没有独立局域网 IP。

方式 2:自定义 bridge(改网段)

如果 172.17.0.0/16 和你的内网冲突,可以在 Docker 配置里改默认桥接:

option bip '172.20.0.1/16'

或者界面:Docker → 配置 → 默认桥接,填 172.20.0.1/16,重启 Docker。之后容器会使用新网段,端口映射方式不变。

方式 3:macvlan(容器拿独立局域网 IP)

适合需要容器像局域网设备一样被访问的场景,比如旁路由、Home Assistant、下载器。先开启网卡混杂模式,再创建 macvlan 网络:

ip link set eth0 promisc on
docker network create -d macvlan 
  --subnet=192.168.11.0/24 
  --gateway=192.168.11.1 
  -o parent=eth0 macnet

运行容器并指定 IP:

docker run -d --name web 
  --network macnet --ip 192.168.11.50 
  nginx:alpine

局域网其他设备可以直接访问 192.168.11.50。

注意:parent 要填实际接局域网的网卡(常见是 eth0 或 br-lan);Wi-Fi 网卡通常不支持 macvlan;部分固件需要关闭桥接过滤或调整防火墙。macvlan 容器和宿主机默认不能直接互访,需要额外加 macvlan shim 或走局域网 IP。

方式 4:host 网络(性能最好)

容器直接使用宿主机的网络栈:

docker run -d --name web --network host nginx:alpine

优点是性能好、端口不用映射;缺点是容器和宿主机抢端口,隔离性差。适合明确知道端口占用、对性能敏感的服务。

网络模式 容器 IP 访问方式 优缺点
默认 bridge 172.17.x.x 宿主机 IP:端口 简单、隔离好;要记端口
自定义 bridge 自定义网段 宿主机 IP:端口 避免网段冲突
macvlan 局域网 IP 直接访问容器 IP 像独立设备;配置复杂
host 宿主机 IP 直接使用宿主端口 性能好;端口冲突

五、一步步实战:装 Docker + 挂数据盘 + 跑 nginx

  1. 装 Docker:iStore → 搜索 Docker → 安装 Docker 和 Docker Manager。
  2. 加数据盘:PVE/ESXi 给虚拟机加一块磁盘,按第三节分区、格式化、挂载到 /mnt/data。
  3. 改数据目录:Docker → 配置 → Docker 根目录填 /mnt/data/docker,保存并重启 Docker。
  4. 确认目录:docker info | grep -i "root dir" 应显示 /mnt/data/docker。
  5. 跑测试容器:docker run -d --name web -p 8080:80 nginx:alpine。
  6. 验证:浏览器打开 http://iStoreOS的IP:8080,看到 nginx 欢迎页即成功。
  7. 检查:docker ps、df -h /mnt/data,确认容器运行、磁盘有空间。

六、常见问题

  • 改了 data_root 重启又变回去:检查 /etc/config/dockerd 是否保存成功,以及目标磁盘是否已开机自动挂载。
  • Docker 目录只有 2GB:不要用 /data/docker 这类 overlayfs 目录,改用 /mnt/data/docker。
  • macvlan 容器访问不了外网:检查 parent 网卡、网关、子网是否和 LAN 一致,网卡是否开启 promisc。
  • 端口映射打不开:检查 iStoreOS 防火墙是否放行对应端口,容器是否监听 0.0.0.0。
  • 镜像拉取慢:在 Docker 配置里加国内镜像加速地址,或使用代理。

七、怎么选

你的情况 建议
刚接触 Docker iStore 安装 + 默认 bridge
要长期跑多个容器 外置盘 /mnt/data/docker + 自定义 bridge
容器要像局域网设备一样访问 macvlan
性能优先、端口固定 host 网络
重度使用、数据重要 独立 SSD + /mnt/docker

总结

iStoreOS 上 Docker 的配置可以拆成三个维度:3 种安装方式(iStore、opkg、离线包)、4 种网络模式(bridge、自定义 bridge、macvlan、host)、3 种磁盘位置(系统盘、外置盘、独立分区)。新手直接选“iStore 安装 + 外置盘 /mnt/data/docker + 默认 bridge”最稳;需要容器独立 IP 再上 macvlan;追求性能再用 host。

最后提醒:改 Docker 根目录前先停容器,迁移前备份数据,磁盘一定要确认开机自动挂载,否则重启后容器数据可能“消失”。

上一篇 OpenWrt 磁盘扩容教程:5 种方式一步步操作
下一篇 iStoreOS DDNSTO 教程:路由远程访问安装与网络配置