我编写了一个Python程序,确保在收到Unix SIGTERM信号后正常停止其线程。我理解docker stop向容器内的主进程发送SIGTERM请求,并在宽限期后发送SIGKILL。 docker-compose down的文档声明它“停止容器”,但没有明确说明如何。我假设它在每个容器上调用docker stop
?
答案 0 :(得分:2)
根据user2915097给出的链接,似乎确实如此。 down
类的Project
方法调用其stop
方法,该方法似乎迭代容器并在每个容器上调用stop
。
答案 1 :(得分:0)
NPM和Dockerfile ENTRYPOINT:只是不要
我将在此处添加此内容,以便在某处找到其他人也能找到此答案。
使用Docker Compose的Node.JS Express + MongoDB应用程序。非常基本但它不会触发SIGINT
或SIGTERM
事件。
https://github.com/neozenith/hello-mongo/tree/4c1c3d9a55b574ba5a1c5f45dbf708c65a70c434
<强>解决方案强>
https://github.com/neozenith/hello-mongo/commit/c7e1b7497f204ffaa9387f99cb88188dadc1c094
BEFORE:
# WAS THIS
CMD [ "npm", "start" ]
AFTER :
# FUN FACT: DO NOT RUN ["npm", "start"] as the ENTRYPOINT
# It does not forward the SIGTERM and SIGINT events to Node
ENTRYPOINT [ "node", "server.js" ]
ENTRYPOINT
的执行形式通过SIGTERM
和SIGINT
发送到PID 1.
https://docs.docker.com/engine/reference/builder/#exec-form-entrypoint-example
此处的关键是npm
不会将其转发给node