我正在努力理解为什么我的Docker容器无法优雅地停止,而只是超时。该容器正在运行crond
:
FROM alpine:latest
ADD crontab /etc/crontabs/root
RUN chmod 0644 /etc/crontabs/root
CMD ["crond", "-f"]
而 crontab
文件是:
* * * * * echo 'Working'
# this empty line required by cron
使用命令
docker build . -t periodic:latest
进行构建,使用命令
docker run --rm --name periodic periodic:latest
运行,但是,如果在另一个终端尝试使用命令
docker stop periodic
停止容器时,它无法正常停止。会出现超时并被强制终止。就好像crond
未响应 SIGTERM 一样。请注意,
crond
明确地被分配为 PID 1。/ # ps
PID USER TIME COMMAND
1 root 0:00 crond -f
6 root 0:00 ash
11 root 0:00 ps
然而,如果我这样做:
docker run -it --rm --name shell alpine:latest ash
并在另一个终端中使用 docker exec -it shell crond -f
,我就可以使用 SIGTERM 从第一个 shell 来终止 crond
,所以我知道它可以用 SIGTERM 进行停止。
感谢任何帮助。