我可以从容器内部使泊坞窗“停止”而不是“死亡”吗?

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

我有一个容器,其中包含一个用CMD npm start启动的Node.js脚本。该脚本将运行,执行一些工作并退出。 node进程退出,因为没有任何工作挂起。 npm start成功退出。然后容器停止。

我通过docker start xxxx从cronjob在Synology NAS上运行此容器。完成后,我从其警报系统收到警报Docker容器xxxx意外停止docker container ls -a的状态显示为Exited (0) 5 hours ago。如果监视docker events,则会看到事件dieexitCode=0

[似乎我需要通过产生stop事件而不是die事件来向系统发送信号,表明期望退出。这是我可以在图像中还是在docker start命令行上执行的操作?

docker synology
1个回答
0
投票

我不熟悉Synology,所以我不确定哪个组件正在引发您提到的“警报”,但是我想这只是一个警告,而不是错误,因为:]]

  • 从POSIX的角度来看,退出状态为0很好;
  • “死”泊坞窗事件似乎也很常见,例如运行docker events,然后docker run --rm -it debian bash -c "echo Hello"会产生相同的事件(而“ kill”事件则更可疑)。
  • 所以也许您只是因为Synology假定容器应该运行很长时间才收到这样的警告?

无论如何,以下是与您的问题有关的几点评论:

  • 您真正运行的图像/容器是ephemeral(例如,关于容器所需的数据)吗?因为在这种情况下,您可能更喜欢使用docker start container_name,而不是执行docker run --rm -i --name=container_name image_name …。 (在这种情况下,由于--rmdocker stop container_name将自动触发容器的移除。)
  • 即使您提到的设置对于cron作业听起来很合理(也就是说,您的容器会提前自动停止的事实,您可能对this other SO answer感兴趣,但它提供了有关如何捕获由[C0 ]等
© www.soinside.com 2019 - 2024. All rights reserved.