- Заменен buildx ls на безопасный buildx inspect - Добавлены диагностические команды для buildx - Создана функция docker-diagnose-buildx для отладки - Добавлена функция docker-reset-builder для сброса - Предварительная загрузка образа moby/buildkit:buildx-stable-1 - Полная очистка buildkit контейнеров - Обновлена документация и справка - Добавлен тестовый скрипт для проверки исправлений Автор: Сергей Антропов Сайт: https://devops.org.ru
3.6 KiB
3.6 KiB
Исправления проблем с Docker Buildx
Проблема
Команда docker buildx ls часто зависает в CI/CD окружениях из-за:
- Мертвых Docker контекстов (tcp://...)
- Проблем с доступом к registry
- Недостаточных привилегий
- Старых/битых builder'ов
Решение
1. Замена buildx ls на buildx inspect
Было:
if ! docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then
Стало:
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. Использование
# Диагностика проблем
make docker diagnose
# Сброс builder'а при проблемах
make docker reset-builder
# Обычная настройка (теперь безопасная)
make docker setup-builder
# Сборка образов
make docker build
6. Рекомендации для CI/CD
- Используйте
docker-diagnose-buildxпри проблемах - Настройте прокси для доступа к registry
- Очищайте мертвые контексты регулярно
- Используйте
docker-reset-builderпри зависаниях - Проверяйте права доступа к Docker socket
Автор
Сергей Антропов
Сайт: https://devops.org.ru