“docker-compose down”命令是否会在每个容器上调用“docker stop”命令?

6
我已经编写了一个Python程序,确保在接收到Unix SIGTERM信号时,它的线程能够优雅地停止。我知道docker stop发送一个SIGTERM请求给容器内的主进程,并在优雅期限后发送 SIGKILL。docker-compose down的文档说明它"停止容器",但没有明确说明如何做到。我猜想它会对每个容器调用docker stop ?

6
这两个链接中,第一个是关于Docker Compose项目的Python代码,其中operator.methodcaller('stop', **options)部分是用于停止容器的方法调用。而第二个链接则是Docker Compose命令行工具中用到的信号量(SIGINT和SIGTERM)相关的代码。 - user2915097
2个回答

3

根据user2915097提供的链接,似乎确实如此。 Project类的down方法调用其stop方法,该方法似乎会迭代容器并在每个容器上调用stop


2

NPM和Dockerfile ENTRYPOINT:不要这样做

我要在这里添加一些内容,以便将此答案记录在某个地方,以便其他人也可以找到它。

使用Docker Compose的Node.JS Express + MongoDB应用程序。相当基本,但它不会触发SIGINTSIGTERM事件。

https://github.com/neozenith/hello-mongo/tree/4c1c3d9a55b574ba5a1c5f45dbf708c65a70c434

解决方案

https://github.com/neozenith/hello-mongo/commit/c7e1b7497f204ffaa9387f99cb88188dadc1c094

之前:

# WAS THIS
CMD [ "npm", "start" ]

之后:

# 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 的执行形式会将 SIGTERMSIGINT 信号发送到 PID 1。重点在于,npm 不会将这些信号转发给 node。参考链接:https://docs.docker.com/engine/reference/builder/#exec-form-entrypoint-example

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接