From 6e31a7e6ff7727ac08642ac343c20d1a5cb712b5 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Sun, 31 May 2026 20:23:23 +0500 Subject: [PATCH] fix: Docker container exit on startup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - bot.py: добавить проверку sys.stdin.isatty() для консольного ввода - В Docker stdin не является терминалом, input() падал с EOFError - Консольный режим теперь запускается только в интерактивном терминале - Dockerfile: добавить console_commands/, убрать копирование .env, использовать переменные docker-compose --- Dockerfile | 6 ++++-- bot.py | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6e96ded..1bffbd1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,9 +11,11 @@ RUN pip install --no-cache-dir -r requirements.txt COPY bot.py . COPY commands/ commands/ COPY utils/ utils/ +COPY console_commands/ console_commands -# Копируем .env, если он есть (или передавать переменные через docker-compose) -COPY .env* .env 2>/dev/null || echo "No .env file - use docker-compose environment variables" +# .env передаётся через docker-compose environment: +# DISCORD_TOKEN=${DISCORD_TOKEN} +# MORNING_TIME=${MORNING_TIME:-07:00} # Healthcheck: проверяем, что бот запущен HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ diff --git a/bot.py b/bot.py index c9e09f3..f0cb54d 100644 --- a/bot.py +++ b/bot.py @@ -118,16 +118,19 @@ def console_input(): if __name__ == "__main__": - print("Введите 'stop' для остановки бота") + token = os.getenv("DISCORD_TOKEN") + if not token: + print("Ошибка: токен не найден в .env") + sys.exit(1) - thread = threading.Thread(target=console_input, daemon=True) - thread.start() + # Консольный ввод работает только в интерактивном терминале + # В Docker stdin недоступен — пропускаем консольный режим + if sys.stdin.isatty(): + print("Введите 'stop' для остановки бота") + thread = threading.Thread(target=console_input, daemon=True) + thread.start() try: - token = os.getenv("DISCORD_TOKEN") - if not token: - print("Ошибка: токен не найден в .env") - sys.exit(1) bot.run(token) except KeyboardInterrupt: print("\nОстановка бота...")