我有一个容器,我想在其中终止用于启动容器的进程。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 时也可以实现类似的效果。