Исправления проблем с 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:
98
docs/buildx-fixes.md
Normal file
98
docs/buildx-fixes.md
Normal 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
|
||||
Reference in New Issue
Block a user