我有一个容器,其中包含一个用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
,则会看到事件die
和exitCode=0
似乎我需要通过产生stop
事件而不是die
事件来向系统发送信号,表明期望退出。这是我可以在图像中还是在docker start
命令行上执行的操作?
我不熟悉Synology,所以我不确定哪个组件正在引发您提到的“警报”,但是我想这只是一个警告,而不是错误,因为:
docker events
,然后docker run --rm -it debian bash -c "echo Hello"
会产生相同的事件(而“ kill”事件则更可疑)。所以也许您只是因为Synology假定容器应该运行很长时间才收到这样的警告?
无论如何,以下是与您的问题有关的几点评论:
docker start container_name
或docker run --rm -i image_name …
而不是docker run --rm -d -i image_name …
。 (在这种情况下,由于--rm
,当容器停止时,容器的移除将自动触发。)当满足以下两个条件时,Synology Docker软件包将生成通知Docker容器xxxx意外停止:
docker stop
docker事件退出(您可以通过在容器退出时监视die
来看到此情况)。在任何情况下,容器中的主进程都会自行退出。 docker events
没关系。exitCode
中:/var/packages/Docker/etc/container_name.config
如果<自动启用的] >>。所有这些都会导致容器“启用”并在退出时开始通知:将容器视图中的“切换开关”滑动到“打开”
{
"enabled" : true,
"exporting" : false,
"id" : "dbee87466fb70ea26cd9845fd79af16d793dc64d9453e4eba43430594ab4fa9b",
"image" : "busybox",
"is_ddsm" : false,
"is_package" : false,
"name" : "musing_cori",
"shortcut" : {
"enable_shortcut" : false,
"enable_status_page" : false,
"enable_web_page" : false,
"web_page_url" : ""
}
}
创建的容器不会启动,并且最初不会在退出时发出警告。这可能就是为什么docker run -d ...
和其他临时容器之类的东西不会引起通知的原因。如果您
停止它们它们正在运行
,则可以[。似乎没有办法禁用当前停止的容器。因此,要禁用容器,您必须启动它,然后在它自己退出之前将其停止:将拨动开关拨动后立即关闭。docker run -it --rm busybox
检查您的工作。