摘要:在OpenWRT上安装Docker容器离不开Luci-app-dockerman,它是用于管理Docker容器、镜像、网络、存储卷的服务管理插件,...
在 OpenWRT 上安装 Docker 容器离不开 Luci-app-dockerman,它是用于管理 Docker 容器、镜像、网络、存储卷的服务管理插件,但由于 OpenWRT 官方将 Docker-ce 拆分为 Dockerd 和 Docker 两个包,安装时候要特别注意所需的依赖。
所需依赖
ttyd 用作于 Docker 控制台
luci-lib-docker 为核心依赖
dockerd 用作于 Docker 客户端
luci-lib-jsonc 为核心依赖
docker 用作于 Docker 控制台
安装方法
1、设备空间不足的情况下,建议插个外置硬盘或者扩容个硬盘并挂载到 /opt 分区,作为储存 Docker 数据分区使用,挂载完成重启,不会挂载的,可以查看挂载外置移动硬盘教程,如下图:
2、更换 OPKG 配置内的发行版软件源,注意架构,演示为 aarch64_cortex-a53 架构,自行替换即可,比方将 aarch64_cortex-a53 替换为 x86_64 架构,只需要打开链接查找修改即可,如下图:
# 以下为 aarch64_cortex-a53 架构使用 src/gz openwrt_base https://archive.openwrt.org/releases/packages-22.03/aarch64_cortex-a53/base src/gz openwrt_luci https://archive.openwrt.org/releases/packages-22.03/aarch64_cortex-a53/luci src/gz openwrt_packages https://archive.openwrt.org/releases/packages-22.03/aarch64_cortex-a53/packages src/gz openwrt_routing https://archive.openwrt.org/releases/packages-22.03/aarch64_cortex-a53/routing src/gz openwrt_telephony https://archive.openwrt.org/releases/packages-22.03/aarch64_cortex-a53/telephony
3、安装 Dockerman 所需依赖,分别为 TTYD、Luci-lib-docker、Dockerd、Luci-lib-jsonc 和 Docker,除 TTYD 外单独安装,其他所需依赖的安装建议使用强制安装,自动补齐 Dockerd 的核心依赖,如下图:
# 更新组件 opkg update # 安装TTYD opkg install ttyd # 强制依赖,--force-depends 为强制命令 opkg install luci-lib-docker dockerd luci-lib-jsonc docker --force-depends # 查看版本,有输出就说明成功了 docker --version
4、通过本站提供的 Github 地址下载最新的 Luci-app-dockerman 插件,通过 SFTP 上传到 root 目录下,执行命令进行安装,安装完成就可以在 LuCI 内看到 Docker 服务管理工具了,如下图:
# 下载插件,演示时为 0.5.25 https://github.com/lisaac/luci-app-dockerman # 安装插件,可用 Tab 补齐 opkg install luci-app-dockerman_*_all.ipk
5、安装完成重启设备就会发现不自启动,执行以下启动并设置自启即可,有人喜欢用 S100docker,个人使用了 S99docker,如下图:
# 启动命令 /etc/init.d/dockerd start # 自启命令 ln -s /etc/init.d/dockerd /etc/rc.d/S99docker //本站使用 ln -s /etc/init.d/dockerd /etc/rc.d/S100docker //他人使用
已知问题
禁止 WAN 访问容器映射的端口是基于 Docker 自带的 DOCKER-USER 链,由于 19.03.3 的 这个BUG,可能会不成功,建议更新 Docker-ce 版本。
镜像页面涉及的导入/载入镜像操作,当用于上传.tar文件时,在某些老版本的 LuCI 中,包括LEAN版,会导致不成功,表现为一直 loading/importing,无法上传,是由于 LuCI 库的问题。
由于 luci-lib-jsonc 在转化成 json 字符串时,会将 INT64 的数字转化成 DOUBLE,这个 BUG 导致在使用 <编辑容器/新建容器> 中,提交 CPU 数量/内存限制时,数值介于 INT_MAX 至 INT64 之间的数字转成 DOUBLE,Docker engine 无法接收,会导致出错。