Назад | Перейти на главную страницу

Как убить процесс, с которым был запущен контейнер

У меня есть контейнер, в котором я хотел бы убить процесс, который использовался для запуска контейнера. Последняя строка Dockerfile: CMD ["python", "app.py"]

Моя причина сделать это вместо простой остановки контейнера в том, что я хочу убить процесс, exec bash в контейнер, измените некоторые файлы, а затем снова запустите процесс. Если я убью весь контейнер, у меня не будет возможности bash в и поменять файлы.

Если есть лучший способ достичь того, чего я хочу, я бы предпочел его. Я новичок в докере, поэтому я могу что-то упустить.

Это то, что я сделал, но это не работает.

➜  $ docker top mycontainer
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1447                1226                0                   01:21               ?                   00:00:04            python app.py

➜  $ docker exec -it mycontainer ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.5 20.6 1225304 210344 ?      Ssl  01:21   0:04 python app.py
root        61  0.0  0.2  15572  2208 ?        Rs+  01:35   0:00 ps -aux

➜  $ docker exec -it mycontainer kill -9 1
➜  $ docker top mycontainer
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1447                1226                0                   01:21               ?                   00:00:04            python app.py

У меня была аналогичная проблема. Мне не удалось убить процесс 1. Поэтому сначала мне пришлось запустить другой процесс. Я решил использовать процесс bash с циклом перезапуска.

Я использую Docker-compose, поэтому командный файл моего контейнера выглядел примерно так:

bash -c "echo 'Starting'; while true; do python -u app.py; sleep 4; echo 'restarting'; done"

Подобное возможно при использовании Docker напрямую.