Исправления проблем с 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:
135
Makefile
135
Makefile
@@ -462,26 +462,24 @@ docker:
|
||||
fi;; \
|
||||
clean-builder) \
|
||||
echo "🧹 Очистка multi-arch builder..."; \
|
||||
if docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then \
|
||||
echo "🗑️ Удаление builder $(DOCKER_BUILDX_BUILDER)..."; \
|
||||
docker buildx rm $(DOCKER_BUILDX_BUILDER) || true; \
|
||||
echo "✅ Builder удален"; \
|
||||
else \
|
||||
echo "ℹ️ Builder $(DOCKER_BUILDX_BUILDER) не найден"; \
|
||||
fi;; \
|
||||
$(MAKE) docker-reset-builder;; \
|
||||
setup-builder) \
|
||||
echo "🔧 Настройка multi-arch builder в контейнере..."; \
|
||||
if ! docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then \
|
||||
echo "📦 Создание builder $(DOCKER_BUILDX_BUILDER) в контейнере..."; \
|
||||
docker buildx create --name $(DOCKER_BUILDX_BUILDER) --driver docker-container --bootstrap --use; \
|
||||
echo "⏳ Ожидание запуска builder..."; \
|
||||
sleep 5; \
|
||||
else \
|
||||
echo "✅ Builder $(DOCKER_BUILDX_BUILDER) уже существует"; \
|
||||
if $(MAKE) docker-check-builder >/dev/null 2>&1; then \
|
||||
echo "✅ Builder $(DOCKER_BUILDX_BUILDER) уже существует и готов"; \
|
||||
docker buildx use $(DOCKER_BUILDX_BUILDER); \
|
||||
else \
|
||||
echo "📦 Создание builder $(DOCKER_BUILDX_BUILDER)..."; \
|
||||
$(MAKE) docker-create-builder; \
|
||||
fi; \
|
||||
echo "🔍 Проверка статуса builder..."; \
|
||||
docker buildx inspect $(DOCKER_BUILDX_BUILDER) --bootstrap;; \
|
||||
echo "🔍 Финальная проверка builder..."; \
|
||||
$(MAKE) docker-check-builder;; \
|
||||
diagnose) \
|
||||
echo "🔍 Диагностика buildx проблем..."; \
|
||||
$(MAKE) docker-diagnose-buildx;; \
|
||||
reset-builder) \
|
||||
echo "🔄 Сброс buildx builder..."; \
|
||||
$(MAKE) docker-reset-builder;; \
|
||||
*) \
|
||||
echo "🎯 Доступные команды:"; \
|
||||
echo ""; \
|
||||
@@ -515,12 +513,21 @@ docker:
|
||||
echo " 💡 Безопасно: игнорирует ошибки"; \
|
||||
echo ""; \
|
||||
echo " 🧹 make docker clean-builder - очистка multi-arch builder"; \
|
||||
echo " 💡 Удаляет: builder контейнер"; \
|
||||
echo " 💡 Удаляет: builder контейнер и buildkit контейнеры"; \
|
||||
echo " 💡 Полезно: при проблемах со сборкой"; \
|
||||
echo ""; \
|
||||
echo " 🔧 make docker setup-builder - настройка multi-arch builder"; \
|
||||
echo " 💡 Создает: builder в контейнере (не в системе)"; \
|
||||
echo " 💡 Поддерживает: amd64 и arm64 архитектуры"; \
|
||||
echo " 💡 Безопасно: использует inspect вместо buildx ls"; \
|
||||
echo ""; \
|
||||
echo " 🔍 make docker diagnose - диагностика buildx проблем"; \
|
||||
echo " 💡 Проверяет: версии, контексты, builder, registry"; \
|
||||
echo " 💡 Показывает: рекомендации по устранению проблем"; \
|
||||
echo ""; \
|
||||
echo " 🔄 make docker reset-builder - сброс buildx builder"; \
|
||||
echo " 💡 Удаляет: старый builder и buildkit контейнеры"; \
|
||||
echo " 💡 Создает: новый builder с предварительной загрузкой образа"; \
|
||||
echo ""; \
|
||||
echo " 📊 make docker info - информация о собранных образах"; \
|
||||
echo " 💡 Показывает: размер, дата создания, теги"; \
|
||||
@@ -540,6 +547,93 @@ docker:
|
||||
# ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ДЛЯ DOCKER
|
||||
# =============================================================================
|
||||
|
||||
# Надежная проверка существования buildx builder без использования buildx ls
|
||||
# Использует docker buildx inspect вместо buildx ls для избежания зависаний
|
||||
.PHONY: docker-check-builder
|
||||
docker-check-builder:
|
||||
@echo "🔍 Проверка buildx builder $(DOCKER_BUILDX_BUILDER)..."
|
||||
@if docker buildx inspect $(DOCKER_BUILDX_BUILDER) >/dev/null 2>&1; then \
|
||||
echo "✅ Builder $(DOCKER_BUILDX_BUILDER) существует и готов"; \
|
||||
exit 0; \
|
||||
else \
|
||||
echo "❌ Builder $(DOCKER_BUILDX_BUILDER) не найден"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# Безопасное создание buildx builder с предварительной очисткой
|
||||
.PHONY: docker-create-builder
|
||||
docker-create-builder:
|
||||
@echo "🔧 Создание buildx builder $(DOCKER_BUILDX_BUILDER)..."
|
||||
@echo "📦 Предварительная загрузка образа buildkit..."
|
||||
@docker pull moby/buildkit:buildx-stable-1 || echo "⚠️ Не удалось загрузить moby/buildkit:buildx-stable-1, будет использован авто-пулл"
|
||||
@echo "🗑️ Удаление существующего builder (если есть)..."
|
||||
@docker buildx rm -f $(DOCKER_BUILDX_BUILDER) 2>/dev/null || true
|
||||
@echo "📦 Создание нового builder..."
|
||||
@docker buildx create \
|
||||
--name $(DOCKER_BUILDX_BUILDER) \
|
||||
--driver docker-container \
|
||||
--driver-opt image=moby/buildkit:buildx-stable-1 \
|
||||
--use || exit 1
|
||||
@echo "⏳ Ожидание запуска buildkit контейнера..."
|
||||
@sleep 3
|
||||
@echo "🔍 Проверка готовности builder..."
|
||||
@docker buildx inspect --builder $(DOCKER_BUILDX_BUILDER) --bootstrap >/dev/null || exit 1
|
||||
@echo "✅ Builder $(DOCKER_BUILDX_BUILDER) создан и готов к работе"
|
||||
|
||||
# Диагностика проблем с buildx
|
||||
.PHONY: docker-diagnose-buildx
|
||||
docker-diagnose-buildx:
|
||||
@echo "🔍 ДИАГНОСТИКА BUILDX ПРОБЛЕМ"
|
||||
@echo "=========================================="
|
||||
@echo ""
|
||||
@echo "📊 1. Версии Docker и Buildx:"
|
||||
@docker version --format "Docker: {{.Server.Version}}" 2>/dev/null || echo "❌ Docker недоступен"
|
||||
@docker buildx version 2>/dev/null || echo "❌ Buildx недоступен"
|
||||
@echo ""
|
||||
@echo "📋 2. Docker контексты (поиск мертвых tcp://):"
|
||||
@docker context ls 2>/dev/null || echo "❌ Не удалось получить список контекстов"
|
||||
@echo ""
|
||||
@echo "🔍 3. Проверка builder $(DOCKER_BUILDX_BUILDER):"
|
||||
@if docker buildx inspect $(DOCKER_BUILDX_BUILDER) >/dev/null 2>&1; then \
|
||||
echo "✅ Builder $(DOCKER_BUILDX_BUILDER) существует"; \
|
||||
docker buildx inspect $(DOCKER_BUILDX_BUILDER) --bootstrap >/dev/null 2>&1 && echo "✅ Builder готов" || echo "❌ Builder не готов"; \
|
||||
else \
|
||||
echo "❌ Builder $(DOCKER_BUILDX_BUILDER) не найден"; \
|
||||
fi
|
||||
@echo ""
|
||||
@echo "🐳 4. Buildkit контейнеры:"
|
||||
@docker ps -a --filter "name=buildx_buildkit" --format "table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" 2>/dev/null || echo "❌ Не удалось получить список контейнеров"
|
||||
@echo ""
|
||||
@echo "🌐 5. Проверка доступа к registry:"
|
||||
@echo "📥 Тест загрузки moby/buildkit:buildx-stable-1..."
|
||||
@timeout 30 docker pull moby/buildkit:buildx-stable-1 >/dev/null 2>&1 && echo "✅ Доступ к registry OK" || echo "❌ Проблемы с доступом к registry"
|
||||
@echo ""
|
||||
@echo "🔧 6. Docker socket доступ:"
|
||||
@if [ -S /var/run/docker.sock ]; then \
|
||||
echo "✅ Docker socket доступен: /var/run/docker.sock"; \
|
||||
ls -la /var/run/docker.sock; \
|
||||
else \
|
||||
echo "❌ Docker socket недоступен: /var/run/docker.sock"; \
|
||||
fi
|
||||
@echo ""
|
||||
@echo "💡 РЕКОМЕНДАЦИИ:"
|
||||
@echo " - Если buildx ls зависает: удалите мертвые контексты (docker context rm <name>)"
|
||||
@echo " - Если pull зависает: настройте прокси или используйте mirror registry"
|
||||
@echo " - Если builder не создается: проверьте права доступа к Docker socket"
|
||||
@echo " - Для полной очистки: make docker clean-builder && make docker-create-builder"
|
||||
|
||||
# Быстрая очистка и пересоздание builder
|
||||
.PHONY: docker-reset-builder
|
||||
docker-reset-builder:
|
||||
@echo "🔄 Сброс buildx builder..."
|
||||
@echo "🗑️ Удаление builder $(DOCKER_BUILDX_BUILDER)..."
|
||||
@docker buildx rm -f $(DOCKER_BUILDX_BUILDER) 2>/dev/null || true
|
||||
@echo "🧹 Очистка buildkit контейнеров..."
|
||||
@docker ps -a --filter "name=buildx_buildkit" --format "{{.Names}}" | xargs -r docker rm -f 2>/dev/null || true
|
||||
@echo "📦 Создание нового builder..."
|
||||
@$(MAKE) docker-create-builder
|
||||
@echo "✅ Builder сброшен и готов к работе"
|
||||
|
||||
|
||||
# Извлечение тега из базового образа
|
||||
docker-get-base-tag:
|
||||
@@ -687,7 +781,10 @@ help:
|
||||
@echo "🔧 DOCKER BUILDER (Multi-Arch):"
|
||||
@echo " make docker setup-builder - настройка multi-arch builder в контейнере"
|
||||
@echo " make docker clean-builder - очистка multi-arch builder"
|
||||
@echo " make docker diagnose - диагностика buildx проблем"
|
||||
@echo " make docker reset-builder - сброс buildx builder"
|
||||
@echo " 💡 Поддерживает: amd64, arm64, riscv64, ppc64le, s390x, 386, arm/v7, arm/v6"
|
||||
@echo " 💡 Безопасно: использует inspect вместо buildx ls (избегает зависаний)"
|
||||
@echo ""
|
||||
@echo "🔐 VAULT (управление секретами):"
|
||||
@echo " make vault create - создать новый файл секретов"
|
||||
@@ -715,6 +812,8 @@ help:
|
||||
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
|
||||
@echo " make role test minimal # быстрый тест"
|
||||
@echo " make docker setup-builder # настройка multi-arch builder"
|
||||
@echo " make docker diagnose # диагностика buildx проблем"
|
||||
@echo " make docker reset-builder # сброс buildx builder"
|
||||
@echo " make docker build # собрать все образы (amd64 + arm64)"
|
||||
@echo " make docker rebuild # полная пересборка с очисткой кеша"
|
||||
@echo " make controller build # собрать ansible-controller (multi-arch)"
|
||||
@@ -726,5 +825,5 @@ help:
|
||||
@echo "=========================================="
|
||||
|
||||
# Пустые цели для совместимости
|
||||
view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder:
|
||||
view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder diagnose reset-builder:
|
||||
@true
|
||||
|
||||
Reference in New Issue
Block a user