用途:RouterOS 7.x 的 /container 子系统让 MikroTik 硬件直接运行 OCI 兼容容器。它并非 Docker,而是 MikroTik 自有实现,存在显著差异。
前提条件:需 RouterOS 7.x 并安装 container 附加包;必须启用 device-mode(初次需物理接触);存储需充足,建议外置 USB 磁盘;仅支持 ARM、ARM64 或 x86,MIPS 不支持容器。
device-mode:容器支持受 device-mode 限制,启用需物理确认(按复位键或断电重启)。命令: /system/device-mode/update mode=advanced container=yes 执行后需在 activation-timeout 内物理确认。7.22+ 可在 netinstall 时通过 mode 脚本(-sm)在首次启动设置 device-mode。
安装容器包:先检查 /system/package/print where name=container。方式一:上传 .npk 后用 /system/package/apply-changes 应用(7.18+ 必须用 apply-changes,/system/reboot 会丢弃上传的包;7.18 以下只能用 reboot)。方式二:联网执行 /system/package/update check-for-updates 与 /system/package/update install。
网络:通过 VETH 接口连接容器网络,如 /interface/veth/add name=veth-myapp address=172.17.0.2/24 gateway=172.17.0.1(7.21+ VETH 名称即容器接口名)。可建 bridge 并加 VETH 与 IP,配置 srcnat masquerade 及 dstnat 端口转发。需要 L2 直连时可把物理口与 VETH 加入同一 bridge。
环境变量与挂载:7.21+ 可在 /container/add 直接用 env= 与 mount= 内联;也可用命名列表(7.20+ envlists=,7.21+ mountlists=),早于 7.20 为 envlist= 单数或无此属性。建议容器卷放在外置磁盘 disk1/。
镜像格式:支持从注册表拉取(remote-image=)或导入本地 tar(file=)。本地导入要求:仅单层、不压缩 tar、Docker v1 manifest 格式(manifest.json + config.json + layer.tar)。
生命周期:用 /container/add、/container/start、/container/stop、/container/print、/log/print where topics~"container"、/container/remove,删除前须完全停止。REST API 中 .running 为字符串 "true"/"false",无 .stopped 字段,停止中删除会返回 HTTP 400,需轮询。
属性(7.22 起):interface、env、envlists、mount、mountlists、root-dir、file、remote-image、cmd、entrypoint、hostname、dns、logging、start-on-boot、workdir、name、devices、cpu-list、memory-high 等,非完整列表。
架构映射:arm→linux/arm/v7,arm64→linux/arm64,x86→linux/amd64。
/app 系统:7.21 引入 /app 路径,7.22 加入 /app/add 的 YAML 应用创建。需完整 VETH/bridge/L2 控制(如 netinstall)时用手动 /container;标准多容器应用可用 /app YAML。
限制:设备与存储有要求,device-mode 需物理确认,本地 tar 有多层与压缩限制,属性名称随版本变化,具体以对应版本命令树为准。