From 751845bf08b44afd119c0395937ee3bf9e83ec7d Mon Sep 17 00:00:00 2001 From: iqubik Date: Mon, 30 Mar 2026 23:25:18 +0300 Subject: [PATCH] check dockers containers start errors --- install.sh | 39 +++++++++++++++++++++++++++++++++++++++ update.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/install.sh b/install.sh index 3c45fc0..783c67a 100644 --- a/install.sh +++ b/install.sh @@ -50,6 +50,38 @@ resolve_compose_cmd() { die "Не удалось установить Docker Compose. Установите docker compose plugin (v2) или docker-compose (v1)." } +check_containers_running() { + log "Проверка статуса контейнеров..." + local timeout=${1:-60} + local elapsed=0 + local failed=0 + + while [ $elapsed -lt $timeout ]; do + failed=0 + # Получаем статус всех контейнеров текущего compose проекта + # Формат: NAME\tSTATUS (например: "3dp-postgres\tUp 2 days" или "3dp-postgres\tError") + while IFS=$'\t' read -r container_name status; do + if [ -n "$container_name" ]; then + # Проверяем, что статус содержит running/healthy (Up, running, healthy, restarting) + if ! echo "$status" | grep -qiE "(running|healthy|up[[:space:]]|restarting)"; then + failed=1 + warn "Контейнер $container_name в статусе: $status" + fi + fi + done < <("${COMPOSE_CMD[@]}" ps --format "table {{.Name}}\t{{.Status}}" --all 2>/dev/null | tail -n +2) + + if [ $failed -eq 0 ]; then + log "Все контейнеры запущены успешно" + return 0 + fi + + sleep 2 + elapsed=$((elapsed + 2)) + done + + return 1 +} + ################################# # ASCII-баннер ################################# @@ -515,6 +547,13 @@ log "Сборка и запуск контейнеров..." # Запускаем сборку и старт "${COMPOSE_CMD[@]}" up --build -d --remove-orphans +# Проверка: все ли контейнеры запустились +if ! check_containers_running 60; then + error "Не удалось запустить контейнеры. Логи:" + "${COMPOSE_CMD[@]}" logs --tail=50 + die "Установка прервана из-за ошибки запуска контейнеров" +fi + log "Очистка кэша сборки..." docker image prune -f diff --git a/update.sh b/update.sh index 3e6c3ed..80dccdc 100644 --- a/update.sh +++ b/update.sh @@ -27,6 +27,37 @@ resolve_compose_cmd() { die "Не найден Docker Compose (ни v2 plugin, ни v1 binary)" } +check_containers_running() { + log "Проверка статуса контейнеров..." + local timeout=${1:-60} + local elapsed=0 + local failed=0 + + while [ $elapsed -lt $timeout ]; do + failed=0 + # Формат: NAME\tSTATUS (например: "3dp-postgres\tUp 2 days" или "3dp-postgres\tError") + while IFS=$'\t' read -r container_name status; do + if [ -n "$container_name" ]; then + # Проверяем, что статус содержит running/healthy (Up, running, healthy, restarting) + if ! echo "$status" | grep -qiE "(running|healthy|up[[:space:]]|restarting)"; then + failed=1 + warn "Контейнер $container_name в статусе: $status" + fi + fi + done < <("${COMPOSE_CMD[@]}" ps --format "table {{.Name}}\t{{.Status}}" --all 2>/dev/null | tail -n +2) + + if [ $failed -eq 0 ]; then + log "Все контейнеры запущены успешно" + return 0 + fi + + sleep 2 + elapsed=$((elapsed + 2)) + done + + return 1 +} + need_root() { [[ $EUID -eq 0 ]] || die "Запускать только от root" } @@ -67,6 +98,13 @@ fi log "Пересоздание контейнеров..." "${COMPOSE_CMD[@]}" up -d +# Проверка: все ли контейнеры запустились +if ! check_containers_running 60; then + error "Не удалось запустить контейнеры. Логи:" + "${COMPOSE_CMD[@]}" logs --tail=50 + die "Обновление прервано из-за ошибки запуска контейнеров" +fi + log "Очистка старых Docker-образов (освобождение места)..." docker image prune -f