Контейнери Docker у MikroTik RouterOS 7: встановлення й запуск

RouterOS 7 вміє запускати контейнери з образів Docker просто на роутері. Це дає змогу розмістити на MikroTik невеликі сервіси — блокувальник реклами Pi-hole, сервер моніторингу, проксі або власний скрипт — без окремого комп’ютера. Повноцінного Docker усередині немає: RouterOS використовує власну реалізацію, сумісну з образами формату OCI.
Вимоги та обмеження
- RouterOS 7.4 або новіша. Краще використовувати актуальну стабільну версію: синтаксис команд для контейнерів змінювався від випуску до випуску.
- Архітектура arm, arm64 або x86. До останньої належить хмарний роутер CHR на VPS. Образ має бути зібраний під архітектуру пристрою.
- Зовнішній накопичувач. Вбудованої пам’яті роутера мало, а частий запис швидко її зношує. Використовуйте USB-диск або NVMe; на CHR — окремий віртуальний диск.
- Оперативна пам’ять. Контейнери витрачають пам’ять роутера. На пристроях із 256 МБ запускати їх не варто.
Крок 1. Встановіть пакет container
- На сайті mikrotik.com у розділі завантажень завантажте архів Extra packages для своєї архітектури та версії RouterOS.
- Розпакуйте архів і завантажте файл
container-*.npkу розділ Files роутера. - Перезавантажте роутер:
/system/reboot
Після перезавантаження в меню з’явиться розділ Container.
Крок 2. Увімкніть режим container
/system/device-mode/update container=yes
Роутер попросить підтвердити дію: протягом зазначеного часу потрібно натиснути кнопку скидання на корпусі або вимкнути й увімкнути живлення. На CHR вимкніть віртуальну машину з панелі керування та запустіть знову. Це захист від віддаленого ввімкнення функції зловмисником.
Перевірте результат:
/system/device-mode/print
Крок 3. Підготуйте диск
Відформатуйте зовнішній накопичувач в ext4 і подивіться його ім’я:
/disk/print
/disk/format-drive usb1 file-system=ext4
Команда форматування знищує всі дані на диску. У прикладах нижче накопичувач називається disk1 — підставте своє ім’я.
Крок 4. Налаштуйте мережу для контейнерів
Контейнер підключається до роутера через віртуальний інтерфейс veth. Створимо окремий міст і підмережу:
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
/interface/bridge/add name=containers
/ip/address/add address=172.17.0.1/24 interface=containers
/interface/bridge/port add bridge=containers interface=veth1
Щоб контейнер міг виходити в інтернет, додайте правило NAT:
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24
Крок 5. Вкажіть реєстр образів
/container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/tmp
tmpdir — каталог для тимчасових файлів під час завантаження образу. Він має бути на зовнішньому диску.
Крок 6. Запустіть контейнер
Розберемо на прикладі Pi-hole — DNS-сервера з блокуванням реклами.
Задайте змінні оточення:
/container/envs/add list=ENV_PIHOLE key=TZ value="Europe/Kyiv"
/container/envs/add list=ENV_PIHOLE key=FTLCONF_webserver_api_password value="надійний_пароль"
/container/envs/add list=ENV_PIHOLE key=DNSMASQ_USER value="root"
Опишіть постійні каталоги — без них налаштування зникнуть під час перестворення контейнера:
/container/mounts/add list=MOUNT_PIHOLE_PIHOLE src=disk1/volumes/pihole/pihole dst=/etc/pihole
/container/mounts/add list=MOUNT_PIHOLE_DNSMASQD src=disk1/volumes/pihole/dnsmasq.d dst=/etc/dnsmasq.d
Створіть контейнер:
/container/add remote-image=pihole/pihole interface=veth1 root-dir=disk1/images/pihole mountlists=MOUNT_PIHOLE_PIHOLE,MOUNT_PIHOLE_DNSMASQD envlist=ENV_PIHOLE name=pihole start-on-boot=yes logging=yes
Роутер почне завантажувати й розпаковувати образ. Стежте за станом:
/container/print
Коли статус зміниться на stopped, запустіть контейнер:
/container/start pihole
Крок 7. Доступ до сервісу
З локальної мережі контейнер доступний за адресою 172.17.0.2, якщо файрвол дозволяє трафік між мережами. Щоб відкрити вебінтерфейс за адресою самого роутера, прокиньте порт:
/ip/firewall/nat/add chain=dstnat action=dst-nat dst-address=192.168.88.1 dst-port=8080 protocol=tcp to-addresses=172.17.0.2 to-ports=80
Для Pi-hole залишиться вказати адресу 172.17.0.2 як DNS-сервер у налаштуваннях DHCP роутера.
Керування контейнерами
/container/print # список і стан
/container/start pihole # запустити
/container/stop pihole # зупинити
/container/shell pihole # командний рядок усередині контейнера
/container/remove pihole # видалити
/log/print where topics~"container" # журнал
Щоб оновити образ, зупиніть і видаліть контейнер, потім створіть його заново тією самою командою. Дані в змонтованих каталогах збережуться.
Що має сенс запускати на роутері
Підходять легкі мережеві сервіси: Pi-hole або AdGuard Home, клієнт тунелю, невеликий вебсервер, агент моніторингу. Бази даних, медіасервери й усе, що активно пише на диск або потребує багато пам’яті, краще розмістити на окремому сервері з повноцінним Docker — див. інструкцію зі встановлення.
Часті проблеми
- Розділу Container немає. Не встановлено пакет
containerабо його версія не збігається з версією RouterOS. - Команди контейнера недоступні. Не підтверджено режим пристрою: повторіть крок 2.
- Образ не завантажується. Контейнерна мережа не має виходу в інтернет або не налаштовано DNS на роутері. Перевірте правило NAT і
/ip/dns/print. - Помилка формату образу. Образ не зібрано під архітектуру роутера.
- Контейнер запускається й одразу зупиняється. Увімкніть
logging=yesі перегляньте журнал: найчастіше бракує пам’яті або не задано обов’язкову змінну оточення.
Безпека
- Тримайте контейнери в окремій підмережі й обмежуйте їхній доступ до локальної мережі правилами файрвола — базове налаштування описано в статті про захист MikroTik.
- Не прокидайте порти контейнерів в інтернет без потреби.
- Регулярно оновлюйте RouterOS та образи.
Відеоінструкція
Відео знято для ранішої версії RouterOS: частина команд відтоді змінилася, загальний порядок дій залишився той самий.



