运行和停止Alpine Docker容器的时间大约是CentOS,Debian或Ubuntu的10倍

问题描述 投票:1回答:2

我正在使用不同的Docker映像来运行代码,并注意到以下内容:

$ time sudo docker stop $(sudo docker run -dit --rm centos:latest)
509285200bcf4ea8389219319b6c4af6554abf9f1c9d9ffb152cd109b6a21453

real    0m1,374s
user    0m0,087s
sys 0m0,027s
$ time sudo docker stop $(sudo docker run -dit --rm debian:latest)
221221b4b9238de633ca68d9539b024c06d015ea503a8b7fd5b827dc903193b8

real    0m1,345s
user    0m0,086s
sys 0m0,034s
$ time sudo docker stop $(sudo docker run -dit --rm ubuntu:latest)
5512fb2505f28f7d2a52788a2ed9775c78ae40805da44e51bb3f22073133f19c

real    0m1,341s
user    0m0,075s
sys 0m0,048s
$ time sudo docker stop $(sudo docker run -dit --rm alpine:latest)
dc1775fa2734c753a5ba6f3fc0b14bf356376d8c701fcf6efa637f1795f41b4a

real    0m11,439s
user    0m0,089s
sys 0m0,032s

如何解释这种差异?

更新:时差仅由docker stop产生。例如,如果我用docker stop -t 30扩展超时,则alpine容器将花费所有时间并最终超时,而其他容器的行为自然不受超时增加的影响。这似乎与SIGTERM的传播有关-我可以找到一些以前的问题,但它们通常与docker stop有关,而与alpine无关。这并不能解释为什么alpine而不是其他图像存在此问题。

docker ubuntu centos signals alpine
2个回答
0
投票

如果这是将高山linux映像与Python应用程序一起使用,则通常需要较长的时间来构建,尤其是使用较大的映像时。

[一个建议是剥离高山基础映像以减少慢速时间,因此删除最初安装的软件包,或者添加一个选项以不使用多阶段构建来缓存软件包下载也可以。


0
投票

docker stop的文档中:

容器内的主进程将收到docker stop,并且在宽限期之后将收到SIGTERM

与使用SIGKILL的CentOS,Debian和Ubuntu相对,Alpine使用bash忽略了busybox sh,并且仅在SIGTERM超时后才停止容器。

与当前版本的SIGKILL不同,后者尊重bash并终止。但是,以前的SIGTERM版本也忽略了bash:使用较旧的CentOS映像(例如SIGTERM)也会产生超时。

[最后,尚不清楚为什么centos:7当前尊重bash(请参阅SIGTERM),或者为什么Why does SIGTERM work to terminate bash but not ash or dash?在本机系统上对SIGHUP有用,但不适用于busybox sh(请参阅docker kill) 。

© www.soinside.com 2019 - 2024. All rights reserved.