Ошибка ограничения скорости Docker при пересборке лаунчера

При запуске ./launcher rebuild app я получаю следующие ошибки:

x86_64 arch detected.

ПРЕДУПРЕЖДЕНИЕ: Мы собираемся начать загрузку базового образа Discourse
Этот процесс может занять от нескольких минут до часа в зависимости от скорости вашей сети

Пожалуйста, будьте терпеливы

Ошибка ответа от демона: toomanyrequests: Вы достигли лимита запросов на извлечение. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: Usage and limits | Docker Docs
Ошибка ответа от демона: toomanyrequests: Вы достигли лимита запросов на извлечение. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: Usage and limits | Docker Docs
Не удалось найти образ ‘discourse/base:2.0.20241203-0251’ локально
docker: Ошибка ответа от демона: toomanyrequests: Вы достигли лимита запросов на извлечение. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: Usage and limits | Docker Docs.
См. ‘docker run --help’.
Ваша установка Docker работает некорректно

См.: Troubleshoot docker installation issues

Сайт работает нормально, но мне нужно установить некоторые плагины. Я пытаюсь выполнить чистую пересборку приложения перед внесением каких-либо изменений в файл app.yml. Есть какие-то идеи?

*** ИСПРАВЛЕНИЕ ПРОБЛЕМЫ ***
Мой сервер использовал IPv6. DockerHub использует более крупные блоки IPv6 для определения ограничений по скорости. Поскольку мой сервер размещен в Digital Ocean, меня объединили в большую группу серверов, и я превысил лимит запросов. Я отключил IPv6, и всё вернулось в норму. Вот инструкции по отключению IPv6 на сервере DO.

Я попробовал снова через 10 часов. Результат тот же. Временное окно Docker Hub составляет 6 часов.

Это чистая установка Discourse, выполненная в последние 40 дней. На данный момент никаких плагинов или кастомизации. Так что…

Как осуществляется доступ к Docker Hub с точки зрения аутентификации? Анонимно? Через вход в Discourse?

Есть ли способ настроить личные учётные данные Docker Hub, чтобы обойти ограничитель скорости?

Спасибо.

Один из возможных полезных тестов — это очень маленькое изображение hello world:

/var/discourse# docker run hello-world
Не удалось найти образ 'hello-world:latest' локально
latest: Загрузка из библиотеки hello-world
478afc919002: Загрузка завершена
Digest: sha256:5b3cc85e16e3058003c13b7821318369dad01dac3dbb877aac3c28182255c724
Status: Установлен новый образ hello-world:latest

Привет от Docker!
Это сообщение показывает, что ваша установка, по-видимому, работает корректно.

Чтобы сгенерировать это сообщение, Docker выполнил следующие шаги:
 1. Клиент Docker связался с демоном Docker.
 2. Демон Docker загрузил образ "hello-world" из Docker Hub.
    (arm64v8)
 3. Демон Docker создал новый контейнер из этого образа, который запускает исполняемый файл, генерирующий вывод, который вы сейчас читаете.
 4. Демон Docker передал этот вывод клиенту Docker, который отправил его в ваш терминал.

Чтобы попробовать что-то более амбициозное, вы можете запустить контейнер Ubuntu с помощью команды:
 $ docker run -it ubuntu bash

Обменивайтесь образами, автоматизируйте рабочие процессы и многое другое с бесплатным идентификатором Docker:
 https://hub.docker.com/

Для получения дополнительных примеров и идей посетите:
 https://docs.docker.com/get-started/

Те же результаты:

docker run hello-world
Не удалось найти образ ‘hello-world:latest’ локально
docker: Ошибка ответа от демона: toomanyrequests: Вы достигли лимита на скачивание образов. Вы можете увеличить лимит, выполнив аутентификацию и обновив подписку: Usage and limits | Docker Docs.
См. ‘docker run --help’.

Я только что столкнулся с этой проблемой на двух форумах Discourse (разные серверы/IP).

Пожалуйста, подождите

Ошибка ответа от демона: toomanyrequests: Вы достигли лимита на извлечение образов. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: https://www.docker.com/increase-rate-limit
Ошибка ответа от демона: toomanyrequests: Вы достигли лимита на извлечение образов. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: https://www.docker.com/increase-rate-limit
Не удалось найти образ 'discourse/base:2.0.20241203-0251' локально
docker: Ошибка ответа от демона: toomanyrequests: Вы достигли лимита на извлечение образов. Вы можете увеличить лимит, выполнив аутентификацию и обновив тарифный план: https://www.docker.com/increase-rate-limit.
Смотрите 'docker run --help'.
Ваша установка Docker работает некорректно

Смотрите: https://meta.discourse.org/t/docker-error-on-bootstrap/13657/18?u=sam

Надеюсь, это не внезапное ограничение со стороны Docker, направленное на то, чтобы заставить людей платить.

Вот что говорит ИИ-ассистент Docker, но новые ограничения скорости не должны вступить в силу до 1 марта. (Если Discourse выполняет более 10 операций pull во время пересборки, это, вероятно, затронет пользователей. Редакция: похоже, что ограничение уже установлено на уровне 10.)

Исходя из предоставленных источников знаний, Docker действительно недавно внес изменения в свою политику ограничения скорости. Вот что я могу сообщить:

Docker объявил о новых лимитах использования и скорости для Docker Hub, которые вступят в силу 1 марта 2025 года. Согласно документации Docker Hub usage and rate limits:

  1. Для неавторизованных пользователей действует ограничение на операции pull — 10 запросов в час с одного IP-адреса.
  2. Для авторизованных пользователей Docker Personal лимит составляет 40 операций pull в час.
  3. Для авторизованных пользователей Docker Pro, Team и Business ограничений на операции pull нет.

Кроме того, Docker ввел новые лимиты на операции pull в зависимости от тарифного плана:

  • Docker Personal: 40 операций pull в час
  • Docker Pro: 25 тысяч операций pull в месяц
  • Docker Team: 100 тысяч операций pull в месяц
  • Docker Business: 1 миллион операций pull в месяц

Эти изменения были объявлены в заметке о выпуске Docker Hub от 14 мая 2020 года, где говорится:

“Docker внедрил ограничения скорости загрузки для загрузок и запросов на pull в Docker Hub. Это ограничивает количество объектов, которые пользователи могут загрузить в течение определенного периода времени.”

Чтобы избежать достижения этих лимитов, вы можете:

  1. Авторизовать свои запросы на pull, если вы еще этого не сделали.
  2. Перейти на платный тариф, если вам нужны более высокие лимиты.
  3. Внедрить лучшие практики управления использованием Docker Hub, например, использовать кэширование и оптимизировать стратегии выполнения операций pull.

Если вы сталкиваетесь с ограничениями скорости на нескольких сайтах, возможно, вы достигаете лимитов для разных сервисов или ваш IP-адрес используется совместно, что приводит к кумулятивному ограничению скорости. Однако предоставленная информация касается конкретно ограничений скорости Docker Hub.

Спасибо за подтверждение, что проблема не только в моей системе.

Мне удалось обновить как Docker Manager, так и уровень системы Discourse через панель администратора без каких-либо проблем. Однако при каждой попытке запустить пересборку через launcher я получаю ошибку превышения лимита запросов.

Обновление, похоже, работает из панели управления, как на форумах, так и в терминале, где применяется ограничение скорости.

Где вы размещены?

Я открыл тикет в службу поддержки DigitalOcean по этому вопросу и получил подтверждение, что это проблема, но только для droplet’ов с включённым IPv6.

Docker Hub ограничивает скорость запросов на основе диапазона адресов, а не одного IP-адреса для IPv6 (из-за чего лимит в 100 запросов за 6 часов для анонимных пользователей исчерпывается практически мгновенно у крупных провайдеров VPS).

Если вы отключите IPv6, вы сможете выполнить сборку заново.

Мои сайты размещены на DigitalOcean с включённой поддержкой IPv6.

Та же проблема. Попробуйте отключить IPv6 в веб-интерфейсе управления DigitalOcean, если он не нужен для других сервисов (думаю, это можно сделать без перезагрузки дроплета), и попробуйте снова.

Я не вижу способа отключить IPv6 в настройках дроплета, но я позже посмотрю внимательнее.


Я ошибался насчет того, что обновления работают из панели управления. Одно прошло успешно, но другое упало посередине. Теперь панель управления показывает, что система устарела:

Редактирование: сообщение исчезло после перезагрузки дроплета.

discourse-2

Но при нажатии на него меня перекидывает на страницу, где сказано, что всё актуально:

Вот сообщение об ошибке:

...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Команда была завершена сигналом SIGKILL (принудительное завершение): ember build -prod
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬ
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:211:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:112:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:41:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:41:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5/lib/active_support/execution_wrapper.rb:92:in `wrap'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:40:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:71:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:149:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:69:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands.rb:18:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Запуск 1 остановленного ранее воркера Unicorn

Отключение IPv6 на сервере Digital Ocean решило проблему: Вот инструкция от DO о том, как отключить IPv6.