У меня есть контейнер, в котором я хотел бы убить процесс, который использовался для запуска контейнера. Последняя строка 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 напрямую.