fix: Docker container exit on startup
- bot.py: добавить проверку sys.stdin.isatty() для консольного ввода - В Docker stdin не является терминалом, input() падал с EOFError - Консольный режим теперь запускается только в интерактивном терминале - Dockerfile: добавить console_commands/, убрать копирование .env, использовать переменные docker-compose
This commit is contained in:
parent
7bfb96c31d
commit
6e31a7e6ff
@ -11,9 +11,11 @@ RUN pip install --no-cache-dir -r requirements.txt
|
|||||||
COPY bot.py .
|
COPY bot.py .
|
||||||
COPY commands/ commands/
|
COPY commands/ commands/
|
||||||
COPY utils/ utils/
|
COPY utils/ utils/
|
||||||
|
COPY console_commands/ console_commands
|
||||||
|
|
||||||
# Копируем .env, если он есть (или передавать переменные через docker-compose)
|
# .env передаётся через docker-compose environment:
|
||||||
COPY .env* .env 2>/dev/null || echo "No .env file - use docker-compose environment variables"
|
# DISCORD_TOKEN=${DISCORD_TOKEN}
|
||||||
|
# MORNING_TIME=${MORNING_TIME:-07:00}
|
||||||
|
|
||||||
# Healthcheck: проверяем, что бот запущен
|
# Healthcheck: проверяем, что бот запущен
|
||||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||||
|
|||||||
15
bot.py
15
bot.py
@ -118,16 +118,19 @@ def console_input():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Введите 'stop' для остановки бота")
|
|
||||||
|
|
||||||
thread = threading.Thread(target=console_input, daemon=True)
|
|
||||||
thread.start()
|
|
||||||
|
|
||||||
try:
|
|
||||||
token = os.getenv("DISCORD_TOKEN")
|
token = os.getenv("DISCORD_TOKEN")
|
||||||
if not token:
|
if not token:
|
||||||
print("Ошибка: токен не найден в .env")
|
print("Ошибка: токен не найден в .env")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Консольный ввод работает только в интерактивном терминале
|
||||||
|
# В Docker stdin недоступен — пропускаем консольный режим
|
||||||
|
if sys.stdin.isatty():
|
||||||
|
print("Введите 'stop' для остановки бота")
|
||||||
|
thread = threading.Thread(target=console_input, daemon=True)
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
try:
|
||||||
bot.run(token)
|
bot.run(token)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("\nОстановка бота...")
|
print("\nОстановка бота...")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user