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

时间:2016-11-07 08:56:18

标签: docker

我编写了一个Python程序,确保在收到Unix SIGTERM信号后正常停止其线程。我理解docker stop向容器内的主进程发送SIGTERM请求,并在宽限期后发送SIGKILL。 docker-compose down的文档声明它“停止容器”,但没有明确说明如何。我假设它在每个容器上调用docker stop

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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的执行形式通过SIGTERMSIGINT发送到PID 1.

https://docs.docker.com/engine/reference/builder/#exec-form-entrypoint-example

此处的关键是npm不会将其转发给node