如何终止容器启动的进程

如何终止容器启动的进程

我有一个容器,我想在其中终止用于启动容器的进程。Dockerfile 的最后一行是CMD ["python", "app.py"]

我之所以这样做而不是直接停止容器,是因为我想终止进程,exec bash进入容器,更改一些文件,然后重新启动进程。如果我终止整个容器,那么我就无法bash进入并更改文件。

如果有更好的方法来实现我的目的,我更愿意采用这种方法。我是 docker 新手,所以我可能会遗漏一些东西。

这是我所做的,但没有效果。

➜  $ 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

我遇到了类似的问题。我无法终止进程 1。所以我不得不先运行另一个进程。我选择使用带有重启循环的 bash 进程。

我正在使用 Docker-compose,因此我的容器的命令文件最终看起来像这样:

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

直接使用 Docker 时也可以实现类似的效果。

相关内容