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

99 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправления проблем с 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