- Заменен buildx ls на безопасный buildx inspect - Добавлены диагностические команды для buildx - Создана функция docker-diagnose-buildx для отладки - Добавлена функция docker-reset-builder для сброса - Предварительная загрузка образа moby/buildkit:buildx-stable-1 - Полная очистка buildkit контейнеров - Обновлена документация и справка - Добавлен тестовый скрипт для проверки исправлений Автор: Сергей Антропов Сайт: https://devops.org.ru
99 lines
3.6 KiB
Markdown
99 lines
3.6 KiB
Markdown
# Исправления проблем с 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
|