From 5e51175d440a9c4415487ce1a5e93c7d2b5c2631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Fri, 15 May 2026 01:31:31 +0300 Subject: [PATCH] fix(install): tolerate docker port failure on stopped panel container pipefail aborted the script after download when inspect succeeded but port mapping was unavailable (Stopped/Created). Co-authored-by: Cursor --- README.md | 2 +- package.json | 2 +- scripts/install.sh | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a173007..fc3da3d 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scrip ### `SKIP_DOWNLOAD=1 bash scripts/install.sh` завершается сразу без вывода («нифига» не происходит) -В старых версиях под **`set -o pipefail`** подсчёт контейнеров через **`grep`** падал, если **нет ни одного запущенного имени `amnezia-awg…`** (например WG остановлен или имя другое): скрипт завершался до строки **«Сборка образа»**. Обновите **`scripts/install.sh`** до актуального из `main` или не используйте локальную копию без исправления. +В старых версиях под **`set -o pipefail`** подсчёт контейнеров через **`grep`** падал, если **нет ни одного запущенного имени `amnezia-awg…`**; отдельно тот же эффект давал пайплайн **`docker port … | head | awk`** при **остановленном** `amnezia-admin`: `docker inspect` ещё «видит» контейнер, а **`docker port` возвращает ошибку**. Скрипт обрывался до **«Сборка образа»**. Обновите **`scripts/install.sh`** до актуального из `main` или временно выполните **`docker rm -f amnezia-admin`** перед установкой. ### Лендинг: порт 80 занят diff --git a/package.json b/package.json index 17395f3..e787a7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amnezia-admin", - "version": "1.2.4", + "version": "1.2.5", "private": true, "description": "amnezia_web — базовая панель AmneziaWG (FREE: просмотр и удаление клиентов; полная версия — PRO).", "license": "MIT", diff --git a/scripts/install.sh b/scripts/install.sh index 790ef60..e62f939 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -77,7 +77,12 @@ mkdir -p "${DATA_DIR}" # При повторном запуске не менять внешний порт панели, если не указали HOST_PORT явно (по умолчанию 8080). PREV_HOST_PORT="" if docker inspect "${CONTAINER_NAME}" >/dev/null 2>&1; then - PREV_HOST_PORT="$(docker port "${CONTAINER_NAME}" 3980/tcp 2>/dev/null | head -1 | awk -F: '{print $NF}')" + # Контейнер может существовать, но быть остановлен: `docker port` тогда код ≠ 0 — при pipefail рвём весь скрипт без сообщения. + __dock_port_out="" + __dock_port_out="$(docker port "${CONTAINER_NAME}" 3980/tcp 2>/dev/null)" || : + if [[ -n "${__dock_port_out}" ]]; then + PREV_HOST_PORT="$(printf '%s\n' "${__dock_port_out}" | head -n1 | awk -F: '{print $NF}')" || PREV_HOST_PORT="" + fi if [[ -n "${PREV_HOST_PORT}" && "${HOST_PORT}" == "8080" ]]; then HOST_PORT="${PREV_HOST_PORT}" echo "→ Уже запущен ${CONTAINER_NAME}: сохраняю внешний порт ${HOST_PORT} (укажите HOST_PORT=… чтобы сменить)."