我有一个带有一个 Node.js 脚本的容器,该脚本使用CMD npm start. 脚本运行,做一些工作,然后退出。该node进程退出,因为没有待处理的工作。在npm start成功退出。然后容器停止。
我通过 cronjob 在 Synology NAS 上运行这个容器docker start xxxx。当它完成时,我从他们的警报系统中收到一个警报Docker 容器 xxxx 意外停止。docker container ls -a将其状态显示为Exited (0) 5 hours ago。如果我监视docker events我看到的情况die与exitCode=0
似乎我需要通过生成stop事件而不是die事件来向系统发出信号,表明预期退出。这是我可以在我的图像或docker start命令行上做的事情吗?
Ben*_*son 14
当满足以下两个条件时,Synology Docker 套件将生成通知Docker 容器 xxxx 意外停止:
diedocker 事件退出(您可以通过监视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" : ""
}
}
Run Code Online (Sandbox Code Playgroud)
如果您从 GUI 启动容器,则会自动启用它们。所有这些都会导致容器“启用”并在退出时开始通知:
这可能就是您的容器最终“启用”的方式以及它现在每次退出时发出通知的原因。创建的容器在docker run -d ...开始时不会启用,并且最初不会在退出时发出警告。这可能就是为什么像docker run -it --rm busybox其他临时容器这样的东西不会引起通知。
如果在容器运行时停止它们,则可以禁用它们。似乎无法禁用当前已停止的容器。因此,要禁用容器,您必须启动它,然后在它自行退出之前停止它:
通过查看来检查您的工作。/var/packages/Docker/etc/container_name.config
在没有通知的情况下停止/启动容器的另一个选项是通过 Synology Web API 执行此操作。
停止容器:
synowebapi --exec api=SYNO.Docker.Container version=1 method=stop name="CONTAINER_NAME"
然后重新启动它:
synowebapi --exec api=SYNO.Docker.Container version=1 method=start name="CONTAINER_NAME"
[Line 255] Not a json value: CONTAINER_NAME ,但命令有效并给出一条响应消息,指示"success" : true我真的没有更多关于它的信息,因为我在 Reddit 帖子中偶然发现了它,并且没有太多支持它的信息,但它在 DSM 7.1.1-42962 上对我有用,并且我正在使用它预定任务。
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |