Files
DevOpsLab/docs/buildx-fixes.md
Сергей Антропов e389cad393 Исправления проблем с Docker Buildx
- Заменен buildx ls на безопасный buildx inspect
- Добавлены диагностические команды для buildx
- Создана функция docker-diagnose-buildx для отладки
- Добавлена функция docker-reset-builder для сброса
- Предварительная загрузка образа moby/buildkit:buildx-stable-1
- Полная очистка buildkit контейнеров
- Обновлена документация и справка
- Добавлен тестовый скрипт для проверки исправлений

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:13:00 +03:00

3.6 KiB
Raw Permalink Blame History

Исправления проблем с Docker Buildx

Проблема

Команда docker buildx ls часто зависает в CI/CD окружениях из-за:

  • Мертвых Docker контекстов (tcp://...)
  • Проблем с доступом к registry
  • Недостаточных привилегий
  • Старых/битых builder'ов

Решение

1. Замена buildx ls на buildx inspect

Было:

if ! docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then

Стало:

if docker buildx inspect $(DOCKER_BUILDX_BUILDER) >/dev/null 2>&1; then

2. Новые надежные функции

docker-check-builder

  • Проверяет существование builder'а через inspect
  • Не зависает на мертвых контекстах
  • Возвращает четкий статус

docker-create-builder

  • Предварительная загрузка образа moby/buildkit:buildx-stable-1
  • Очистка старых builder'ов
  • Явное указание образа buildkit
  • Проверка готовности через inspect --bootstrap

docker-diagnose-buildx

  • Полная диагностика проблем с buildx
  • Проверка версий Docker и Buildx
  • Поиск мертвых контекстов
  • Проверка доступа к registry
  • Проверка Docker socket
  • Рекомендации по устранению

docker-reset-builder

  • Полная очистка и пересоздание builder'а
  • Удаление buildkit контейнеров
  • Создание нового builder'а с предварительной загрузкой

3. Обновленные команды

make docker setup-builder

  • Использует docker-check-builder вместо buildx ls
  • Безопасное создание builder'а
  • Предварительная загрузка образа

make docker clean-builder

  • Теперь использует docker-reset-builder
  • Полная очистка buildkit контейнеров

Новые команды:

  • make docker diagnose - диагностика проблем
  • make docker reset-builder - сброс builder'а

4. Преимущества

Нет зависаний - не использует buildx ls
Быстрая диагностика - четкие сообщения об ошибках
Предварительная загрузка - избегает проблем с pull в bootstrap
Полная очистка - удаляет все связанные контейнеры
Подробные логи - понятные сообщения о процессе

5. Использование

# Диагностика проблем
make docker diagnose

# Сброс builder'а при проблемах
make docker reset-builder

# Обычная настройка (теперь безопасная)
make docker setup-builder

# Сборка образов
make docker build

6. Рекомендации для CI/CD

  1. Используйте docker-diagnose-buildx при проблемах
  2. Настройте прокси для доступа к registry
  3. Очищайте мертвые контексты регулярно
  4. Используйте docker-reset-builder при зависаниях
  5. Проверяйте права доступа к Docker socket

Автор

Сергей Антропов
Сайт: https://devops.org.ru