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

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

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-25 15:13:00 +03:00
parent 2652d8376f
commit e389cad393
3 changed files with 330 additions and 18 deletions

98
docs/buildx-fixes.md Normal file
View File

@@ -0,0 +1,98 @@
# Исправления проблем с 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