Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Маленький контейнер Ookla Speedtest

    Маленький контейнер Ookla Speedtest

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Маленький контейнер Ookla Speedtest, RouterOS
     
    aboulfad
    Guest
    #1
    0
    13.12.2023 20:41:00
    Я собрал arm64-версию speedtest от Ookla, и с небольшими правками мне удалось её запустить. Большое спасибо @tangent за его работу и документацию — мой Dockerfile вдохновлён его iperf3-документацией. Размер этого образа примерно равен размеру статического бинарника speedtest (~2.5M).

    FROM alpine:latest AS build  
    RUN wget -O speedtest.tgz "https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-aarch64.tgz" \  
      && tar zxvf speedtest.tgz \  
      && chmod +x speedtest && chown root:root speedtest  
    RUN rm speedtest.tgz  
    RUN wget https://curl.se/ca/cacert.pem  

    From scratch  
    COPY --from=build /speedtest /bin/  
    COPY --from=build /cacert.pem /  

    ENTRYPOINT ["/bin/speedtest", "--accept-license"]
    CMD ["--ca-certificate=/cacert.pem"]

    Обновлённый тест проводился при низкой или отсутствующей нагрузке на роутере/модеме. Топология: RB5009 (обычный мост без маршрутизации) ↔ Giga Hub ↔ Интернет  

    11:17:03 container,info,debug    Speedtest от Ookla  
    11:17:03 container,info,debug       Сервер: Bell Canada - ABCD (id: 12345)  
    11:17:03 container,info,debug          Провайдер: Bell Canada  
    11:17:03 container,info,debug Задержка в простое: 1.00 мс (джиттер: 0.23 мс, минимум: 0.98 мс, максимум: 1.84 мс)  
    11:17:08 container,info,debug    Скачать: 1610.22 Мбит/с (потрачено данных: 727.5 МБ)  
    11:17:08 container,info,debug                  4.63 мс (джиттер: 0.39 мс, минимум: 2.96 мс, максимум: 6.66 мс)  
    11:17:18 container,info,debug    Загрузить: 1015.11 Мбит/с (потрачено данных: 1.2 ГБ)  
    11:17:18 container,info,debug                  13.60 мс (джиттер: 1.53 мс, минимум: 3.69 мс, максимум: 24.74 мс)  
    11:17:18 container,info,debug Потери пакетов: 0.0%  
    11:17:18 container,info,debug Ссылка на результат: > https://www.speedtest.net/result/c/xyz
     
     
     
    tangent
    Guest
    #2
    0
    14.03.2024 19:34:00
    С ENV? Нет, но не вижу причины делать именно так. Обрати внимание на разделение между ENTRYPOINT и CMD в Dockerfile. Это сделано специально: так можно оставить ENTRYPOINT как есть и при этом переопределить CMD любыми нужными тебе флагами.
     
     
     
    toffifee
    Guest
    #3
    0
    26.02.2024 22:53:00
    Привет, Tangent, только что попробовал твой контейнер, но застрял на этом сообщении в логе: Чтобы принять сообщение, запусти speedtest в интерактивном режиме или используй следующее:  
       speedtest --accept-gdpr  
    Как это работает? Пробовал установить переменную окружения с “OOKLA_EULA_GDPR=true”, но это не помогло.
     
     
     
    tangent
    Guest
    #4
    0
    26.02.2024 23:33:00
    Попробуй снова; я добавил этот флаг в командную строку. Здесь это не обязательно, но, возможно, он пропускает это, если не обнаруживает, что ты находишься в ЕС.
     
     
     
    toffifee
    Guest
    #5
    0
    27.02.2024 08:16:00
    Классно! Спасибо за быструю реакцию, Tangent. И за решение — теперь всё работает. Следующий шаг для меня: как извлечь результаты (временную метку, id, задержку, скорость загрузки, выгрузки, потерю пакетов) из LOG и отправить их через MQTT… или может кто-то уже делал это и поделится решением? Первая проблема: как распознать эти записи в LOG? Все контейнеры используют одну и ту же тему = «container, info, debug»?!? Может, стоило бы сделать префикс для фильтра, например, все записи с началом «[speedtest]»?
     
     
     
    toffifee
    Guest
    #6
    0
    29.02.2024 18:04:00
    Любой спидтест — это, конечно, интересно, но без возможности постоянного или частого автоматического мониторинга он толком не помогает. С моей точки зрения, обязательно нужно что-то типа Netwatch или автоматическое использование скриптов для обработки данных. Но пока я немного в растерянности, как сделать это оптимально — с минимальным влиянием на производительность и при этом чтобы было стабильно и просто в использовании. Сейчас вывод лога сложно фильтровать. Может, имеет смысл добавить к выводу префикс, чтобы проще было фильтровать лог с помощью скрипта? Или, может, в контейнере можно сделать что-то другое, чтобы было удобнее — например, вывод в JSON? Какие-то другие варианты?
     
     
     
    toffifee
    Guest
    #7
    0
    14.03.2024 19:13:00
    Привет, tangent, твое решение отлично работает, спасибо! К сожалению, один из серверов всегда выдает слишком низкие значения. Для этого в CLI есть несколько параметров. Можно ли использовать ENV в контейнере Mikrotik, чтобы передавать параметры вызову speedtest в твоем контейнере?

    Это особенно актуально для таких параметров:

    --server SERVER  
    Указать ID сервера для теста. Можно передавать несколько раз.

    --exclude EXCLUDE  
    Исключить сервер из выбора. Можно передавать несколько раз.

    --json  
    Отключить подробный вывод, показывать только основную информацию в формате JSON. Скорости указаны в битах в секунду и не зависят от --bytes.

    С помощью этого вывод можно будет сделать в JSON, а сервера без надежного отклика исключить (или задать конкретные серверы). Думаю, это было бы большим шагом вперёд для твоего решения и не повлияло бы на его лёгкость. Это просто для передачи одного ENV (с несколькими параметрами в нужном формате, например “–json --exclude 10010”) или нескольких ENV (по одному параметру в каждом) в CLI.

    Спасибо! Буду очень признателен, если это как-нибудь реализуется.
     
     
     
    oskaratk
    Guest
    #8
    0
    15.02.2025 01:40:00
    Ну вот, прошло уже много времени... Кто-нибудь успешно запускает это в ROS 7.18? Или какая версия ROS 7.x работает нормально? Сейчас на 7.18 при запуске контейнера вылетают ошибки: «Trying to get interface information on non-initialized socket», «Configuration — Couldn't resolve hostname (HostNotFoundException)». Спасибо, Оскар.
     
     
     
    deanMK
    Guest
    #9
    0
    25.05.2025 12:32:00
    У меня тоже самое... Те же ошибки.
     
     
     
    toffifee
    Guest
    #10
    0
    15.03.2024 08:52:00
    Честно говоря, я пользуюсь Docker, понимаю основную концепцию и принцип его работы, но особо не вдавался в детали dockerfile, как там устроены механизмы, CMD и ENTRYPOINT. Я думал: нельзя ли как-то "обойти" эти параметры и передать что-то напрямую в контейнер? Судя по моему прошлому опыту работы с контейнерами, переменные окружения (ENVs) вроде бы именно для этого и подходят. Но любой другой способ мне тоже подошёл бы, если он работает со стандартными инструментами решения MT контейнеров. К сожалению, я не совсем понял, что вы имели в виду в последнем ответе, извините.
     
     
     
    tangent
    Guest
    #11
    0
    15.03.2024 09:52:00
    Для одного параметра: /container  
     add remote-image=tangentsoft/speedtest-cli:latest \  
     interface=veth1 cmd="--json" logging=yes  

    Для нескольких параметров функция контейнеров в RouterOS не разбивает аргументы по пробелам, и внутри нет оболочки, чтобы сделать это за нас, поэтому нужно собрать контейнер под ваши нужды заново. Следуйте шагам сборки из официальной документации, чтобы клонировать мой репозиторий, затем перед третьим шагом отредактируйте массив CMD в конце Dockerfile, который там найдете, и продолжайте сборку, чтобы получить tarball с образом. Его можно загрузить на роутер и запустить через «/container add file=…».
     
     
     
    toffifee
    Guest
    #12
    0
    15.03.2024 13:55:00
    Спасибо, это было очень полезно и пригодится мне. Я не знал о применении CMD в описании контейнера MT, так как не было примера. Для меня этого достаточно. Отлично!
     
     
     
    oskaratk
    Guest
    #13
    0
    24.09.2024 00:46:00
    Привет! Пытаюсь это запустить, но кажется, что что-то упускаю:  
    /container  
     add remote-image=tangentsoft/speedtest-cli:latest \  
     interface=veth1 cmd="--json" logging=yes  

    add remote-image, похоже, сначала требует указать registry-url. Какой правильный адрес нужно прописать? Спасибо, Оскар
     
     
     
    tangent
    Guest
    #14
    0
    24.09.2024 02:24:00
    Цитируя README.md файл контейнера: «Начните с установки пакета контейнера согласно документации MikroTik…» По этой ссылке вам предлагают выполнить следующую команду: /container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/pull
     
     
     
    oskaratk
    Guest
    #15
    0
    24.09.2024 14:15:00
    Аргх, прочитай инструкцию. Наверное, у меня были помидоры на глазах. Спасибо.
     
     
     
    oskaratk
    Guest
    #16
    0
    24.09.2024 23:06:00
    Ну, я вернулся. Похоже, контейнер установился:  
    /container> print  
    0 name="58319538-67ab-453f-abd6-b24dc918d17a" tag="tangentsoft/speedtest-cli:latest" os="linux" arch="arm" interface=veth1 cmd="--json" mounts="" workdir="/" logging=yes  
    status=stopped, но при запуске /container/start 0 в 16:58:30 получаю: container, info, debug execve: No such file or directory.  
    Буду очень благодарен за любые подсказки. Спасибо, Оскар.
     
     
     
    tangent
    Guest
    #17
    0
    25.09.2024 06:35:00
    У меня такой ошибки нет, но появляется другая, потому что выше я просто скопировал “–json” из поста @toffifee, не проверив перед этим. Этот флаг предназначен для сторонней программы speedtest-cli, а не для официального CLI-утилиты Ookla “speedtest”, которую я упаковываю. Правильная команда такая:  
    /container add remote-image=tangentsoft/speedtest-cli:latest \  
    interface=veth1 cmd="--format=json" logging=yes  

    Учтите, что при таком запуске вы сталкиваетесь с одним из самых раздражающих ограничений контейнерной функции RouterOS — отсутствием локального кеша образа. Каждый раз, когда вы запускаете команду, образ заново скачивается с Docker Hub, хотя с момента моей публикации изменений не было. (И это не потому, что я не слежу за обновлениями Ookla — их CLI-программа до сих пор версия 1.2.0.84.) Если планируете запускать программу часто, лучше загрузите образ в виде tar-файла на роутер, как я описал, и создавайте контейнер с него — так вы обойдёте это ограничение. Если, конечно, ваша цель — просто увеличить количество моих скачиваний на Docker Hub.
     
     
     
    infabo
    Guest
    #18
    0
    25.05.2025 14:45:00
    Скорее всего, это проблема с DNS. Смотрите http://forum.mikrotik.com/t/dns-not-working-in-containers-with-dns-over-https-setup-on-router/165011/1. Я пробовал добавить «dns=1.1.1.1», но это не помогло.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры