Задать вопрос
@pitonessa

Почему docker контейнер перезапускается?

Вводная для понимания вопроса: телеграм - бот, присылающий действия в git-репозитории.
В качестве сервера webhook выбран django, в этом же проекте лежит скрипт самого бота.

Все это дело упаковано в docker-compose.
Привожу текст файлов.

docker-compose.yml:

version: '2'
services:
   web:
       build:
         context: ../
         dockerfile: Dockerfile
       command: bash -c "python manage.py runserver 0.0.0.0:8000"
       ports:
           - '8000:8000'
       container_name: bss-monitoring
       volumes:
         - ../:/app/

   bot:
     build:
       context: ../
     container_name: monitoring_bot
     restart: always
     command: python bot.py


Dockerfile:

# указание базового образа onbuild
FROM python:3.7

# выбор рабочей директории
WORKDIR /app/

# копирование нужного файла из текущей (где лежат все нужные файлы) в рабочую директорию
COPY . /app

# обновить pip
RUN pip install --upgrade pip

# добавить пользователя, от которого будут выполняться команды
# иначе будет ошибка: WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager.
#It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

RUN adduser myuser
USER myuser

# поменять пользователя, от которого будут выполняться команды
COPY --chown=myuser:myuser requirements.txt requirements.txt

# запуск от пользователя USER
RUN pip install --user -r requirements.txt

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Вопрос такой: в проекте есть код, в котором расписывается порядок обработки приходящего json-сообщения (назовем его handler.py) и в последующем передающегося боту (bot.py).
Внесла некоторые изменения в код handler.py и они сразу же отразились в работе. Вручную не пришлось пересобирать образ и перезапускать контейнеры. При этом самостоятельно перезапустился контейнер с ботом (bot), выкинув ошибку, что уже есть запущенный экземпляр бота в телеге(по логам). При этом работа продолжилась в штатном режиме.

telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

Подскажите, пожалуйста, почему так происходит?
Это мой первый такой "проект" и может показаться странным и чрезмерным использовать docker-compose и в целом усложненный подход, но я это делаю для того, чтоб разобраться, как работает система.
  • Вопрос задан
  • 1264 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
DevOps Engineer
Посмотрите логи из перезапускающегося docker containera - можете даже попробовать найти логи от старых контейнеров, которые работали до этого

docker logs -f --until=10s container_id

https://geekflare.com/check-docker-logs/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы