RouterOS在7.4beta4恢复了docker功能,但实际安装nginx测试中发现无法替换html下的文件,提示是权限不允许,RouterOS更新到7.4beta5后发现这个问题已经解决,测试设备为RB5009,配置如下:

 

Device-Mode

与之前的container部署不同,7.4beta4后要求设置container模式,由于新增了Device-mode,默认情况下是限制container使用。Device-mode是一种对设备功能限制属性,即限制对特定功能配置的访问。有两种模式: enterprise和home(企业模式和家庭模式)。所有设备默认都使用enterprise,该模式允许除container外的所有功能。

首先确认你的设备工作在enterprise,如果在home需要修改为enterprise

[admin@MikroTik] > system/device-mode/print
mode: enterprise

当在enterprise模式下,更新container模式,启用container模式命令如下:

[admin@MikroTik] > /system/device-mode/update container=yes
update: please activate by turning power off or pressing reset or mode button
in 5m00s

-- [Q quit|D dump|C-z pause]

在5分钟内,拔插电源重启设备(远程重启无效)或者按设备的reset按钮确认执行container模式,设备会重启生效进入container模式。如果在规定的时间内没有关机或按下reset按钮,则取消模式切换。如果同时运行另一个更新命令,则两个更新命令都将被取消。如果是CHR的虚拟机,需要强制关机。

例如PVE的RouterOS,使用shutdown无效,需要在PVE的控制台开启shell,执行qm stop id 强制关闭

重启之后,查看device-mode

[admin@MikroTik] /system> device-mode/print
mode: enterprise
container: yes
[admin@MikroTik] /system>

创建Docker配置

熟悉RouterOS的朋友都知道RB设备(如hAP系列,hEX系列、RB4011和RB5009等),默认会除ether1口的其他端口作为LAN网络端口,加入到bridge,配置的IP地址段是192.168.88.1/24,

[admin@MikroTik] >/ip/address> print
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
#   ADDRESS             NETWORK        INTERFACE
;;; defconf
0   192.168.88.1/24     192.168.88.0   bridge
1   172.17.0.2/24       172.17.0.0     ether1
2 D 100.64.142.131/32  100.64.142.1  pppoe-out1

这个是我的RB5009当前bridge port成员

[admin@MikroTik] /interface/bridge/port> print
Flags: I - INACTIVE; H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, PVID, PRIORITY, PATH-COST, INTERNA
L-PATH-COST, HORIZON
#    INTERFACE     BRIDGE  HW   PVID  PRIORITY  PA  IN  HORIZON
;;; defconf
0 IH ether2        bridge  yes     1  0x80      10  10  none
;;; defconf
1 IH ether3        bridge  yes     1  0x80      10  10  none
;;; defconf
2 IH ether4        bridge  yes     1  0x80      10  10  none
;;; defconf
3  H ether5        bridge  yes     1  0x80      10  10  none
;;; defconf
4 IH ether6        bridge  yes     1  0x80      10  10  none
;;; defconf
5 IH ether7        bridge  yes     1  0x80      10  10  none
;;; defconf
6  H sfp-sfpplus1  bridge  yes     1  0x80      10  10  none

为了让docker与RB路由器内网IP地址在相同段,配置地址为192.168.88.100,网关192.168.88.1,直接和veth的IP地址放到一个bridge下,即桥接模式。

创建veth接口配置:

[admin@MikroTik] >/interface/veth/add name=veth2 address=192.168.88.100 gateway=192.168.88.1

将veth2添加到bridge中

[admin@MikroTik] >/interface/bridge/port add bridge=bridge interface=veth2

设置registry-url,用于设置Docker的镜像站点,请确保RouterOS能正常连接网络和DNS解析

[admin@MikroTik] >/container/config/set registry-url=https://registry-1.docker.io

配置mount参数,设置nginx的log配置路径,如果使用默认参数,会提示error.log错误,需要单独指定nginx的log路径

/container mounts add dst=/var/log/nginx/ name=nginxlog src=”/disk1/nginx”

通过官方镜像站点获取nginx最新的镜像,并设置logging=yes有助于排查错误

/container/add remote-image=nginx:latest interface=veth2 root-dir=disk1/nginx mounts=nginxlog logging=yes

等待nginx从官方镜像站点下载,等status=stopped后,可以启动nginx

[admin@MikroTik] /container> print
0 name="daa13504-5b4a-43df-bd17-581ecd298483" tag="pihole/pihole:latest" os="linux"
arch="arm64" interface=veth1 envlist="pihole_envs" root-dir=disk1/pihole
mounts=dnsmasq_pihole,etc_pihole dns="" status=running

1 name="a7b0174c-934b-46fe-a352-90be295c0f60" tag="library/nginx:latest" os="linux"
arch="arm64" interface=veth2 root-dir=disk1/nginx mounts=nginxlog dns="" logging=yes
status=stopped

当前nginx的镜像是序列是1 ,使用start 1命令启动

[admin@MikroTik] /container> start 1

确认nginx的status=running

[admin@MikroTik] /container> print
0 name="daa13504-5b4a-43df-bd17-581ecd298483" tag="pihole/pihole:latest" os="linux"
arch="arm64" interface=veth1 envlist="pihole_envs" root-dir=disk1/pihole
mounts=dnsmasq_pihole,etc_pihole dns="" status=running

1 name="a7b0174c-934b-46fe-a352-90be295c0f60" tag="library/nginx:latest" os="linux"
arch="arm64" interface=veth2 root-dir=disk1/nginx mounts=nginxlog dns="" logging=yes
status=running

这是可以打开浏览器输入192.168.88.100,能正常访问到nginx的index页面

在Winbox中的file目录下无法看到container的配置文件,需要通过FTP登录查看

开启RouterOS的FTP登录,可以查看到docker配置文件,例如我的RouterOS网关是192168.88.1,输入ftp://192.168.88.1,输入登录账号和密码:

进入/disk1/nginx目录,能看到nginx配置文件

Nginx相关的配置路径如下:

Nginx配置文件default.conf在/disk1/nginx/etc/nginx/conf.d/

Nginx的html文件路径在/disk1/nginx/usr/share/nginx/html/

根据你的需要替换这些配置文件。

使用shell

使用shell命令可以进入内部终端控制台,如下面操作

[admin@MikroTik] /container> shell
number: 0
root@MikroTik:/# ls
access.log  boot   docker-entrypoint.d   error.log   home   media  opt   root   sbin  sys  usr
bin  dev docker-entrypoint.sh   etc   lib   mnt   proc   run   srv   tmp   var
root@MikroTik:/# exit
exit
done
[admin@MikroTik] /container>

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章很值,打赏犒劳作者一下