我不是在询问使用码头工人的主管,而只是想让我的理解得到验证.
我知道docker在运行时会运行一个进程.此外,当我们需要在容器内运行多个进程时,使用supervisor.
我看过几个例子,其中一个容器是从基本映像启动的,并且安装了几个服务,并且容器被提交以形成一个新的映像,所有这些都没有supervisor.
所以,我的基本疑问是两种方法之间的区别.
我的理解是当docker容器停止时它向PID进程发送一个kill信号,PID 1管理子进程并停止所有的子进程,这正是supervisor所做的,而我们可以安装多个进程而不需要supervisor 发出docker run时可以运行进程,当容器停止时,只有PID 1发送信号,其他正在运行的进程不会正常停止.
请确认我对使用supervisord的理解是否正确.
谢谢
使用此图像(Caddy 网络服务器):
docker run --rm -p 80:80 caddy:latest
Run Code Online (Sandbox Code Playgroud)
我可以通过在终端内发送 CTRL+C来阻止它。
其他一些图像不会以这种方式工作,例如 MariaDB:
docker run -it --rm -p 3306:3306 -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:latest
Run Code Online (Sandbox Code Playgroud)
我无法用 CTRL+C 停止它
我注意到在 Caddy 中Dockerfile没有butENTRYPOINT only CMD,而 MariaDB 有 anENTRYPOINT和 a CMD。
为什么?有什么理由不支持终止信号的处理吗?SIGTERM如果这是原因的话,如何支持docker 入口点呢?