# Исправления проблем с Docker Buildx ## Проблема Команда `docker buildx ls` часто зависает в CI/CD окружениях из-за: - Мертвых Docker контекстов (tcp://...) - Проблем с доступом к registry - Недостаточных привилегий - Старых/битых builder'ов ## Решение ### 1. Замена `buildx ls` на `buildx inspect` **Было:** ```bash if ! docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then ``` **Стало:** ```bash 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. Использование ```bash # Диагностика проблем 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