容器Container是MikroTik RouterOS对Linux Docker的实现,允许用户在RouterOS中运行Docker。Container是在 RouterOS v7.4beta4中开始支持的(其实之前RC版本也支持过)。可以说RouterOS V7版本开始用Container替代了原来的KVM比较合适,目前RouterOS V7不支持KVM了。
一、环境准备
1、RouterOS V7.6
2、AdGuard Home Docker镜像
二、RouterOS Container Package安装
1、把container-7.6的包上传到ROS的Files,重启安装
三、RouerOS Device-Mode设置
ROS新增了Device-mode,默认情况下是限制container使用。Device-mode是一种对设备功能限制属性,即限制对特定功能配置的访问。有两种模式: enterprise和home(企业模式和家庭模式),所有设备默认都使用enterprise。目前Winbox无法管理,只能使用命令。
如果直接使用container会报错,报错提示”Couldn't add Container - not allowed by device-mode (6)“
1、查看当前Device-Mode
[admin@MikroTik] > /system/device-mode/ print
2、当在enterprise模式下,启用container模式
[admin@MikroTik] > /system/device-mode/ update container=yes
3、重启设备(这步要非常注意)
说明:需要在5分钟内,拔插电源重启设备(远程重启无效)或者按设备的reset按钮确认执行container模式,设备会重启生效进入container模式。如果在规定的时间内没有关机或按下reset按钮,则取消模式切换。如果同时运行另一个更新命令,则两个更新命令都将被取消。
目前这部最好的操作就是看到这个提示,什么也不要操作,拔电源重启(虚拟机直接在外部关机重启)即可
四、网络设置
情况1:如果当前有Briage,可以进行以下操作。设置container网卡的ip和网关(根据需求设置),然后在把veth1加入到当前bridge1。
[admin@MikroTik] > /interface/veth/add name=veth1 address=172.16.0.2/24 gateway=172.16.0.1 [admin@MikroTik] > /interface/bridge/port add bridge=bridge1 interface=veth1
情况2:如果当前没有Briage,那么就需要创建Briage,并设置局域网IP
[admin@MikroTik] > /interface/bridge/add name=docker [admin@MikroTik] > /ip/address/add address=172.16.0.1/24 interface=docker
然后设置container网卡ip和网关,再加入到bridge
[admin@MikroTik] > /interface/veth/add name=veth1 address=172.16.0.2/24 gateway=172.16.0.1 [admin@MikroTik] > /interface/bridge/port add bridge=docker interface=veth1
最后设置NAT以及端口转发
[admin@MikroTik] > /ip/firewall/nat/add chain=srcnat action=masquerade [admin@MikroTik] > /ip firewall/nat/add action=dst-nat chain=dstnat dst-port=3000 protocol=tcp to-addresses=172.16.0.2 to-ports=3000
五、外部镜像安装AdGuardHome
1、Container设置Docker镜像地址和目录
[admin@MikroTik] > /container/config/set registry-url=https://registry-1.docker.io tmpdir=container
2、创建AdGuardHome
[admin@MikroTik] > /container/add remote-image=adguard/adguardhome:latest interface=veth1 root-dir=container/adgurdhome logging=yes
3、等到Status变成Stopped,然后就可以启动了。
[admin@MikroTik] > /container/print [admin@MikroTik] > /container/start 1
4、通过web地址,可以访问了。
六、上传镜像安装AdGuardHome
当然ROS也提供了离线上传镜像安装的方式
1、从其他Docker上导出镜像
root@debian:/home/staryu# docker save adguard/adguardhome > adguardhome.tar
2、上传adguardhome.tar到ROS Files
3、创建AdGuardHome
[admin@MikroTik] > /container/add file=adguardhome.tar interface=veth1 root-dir=container/adgurdhome logging=yes
4、选中,点击Start运行,同时可以通过Log查看日志
七、结尾
目前在Winbox中的file目录下无法看到container的配置文件,只能通过FTP去查看。
目前有 3 条评论
可乐 2023-02-11 16:192楼
我拉取镜像网络连接不上会是啥问题啊unexpected response from container registry: Idle timeout - connecting;was unable to import, container 232acd1c-1b7e-4688-9bf3-987ddc4764e7评论
宇宙西瓜 2022-12-07 22:251楼
有没有可能运行 portainer评论
星之宇 2022-12-08 09:11
目前测试了。ROS下无法运行portainer回复