停止 Synology 通知“Docker 容器意外停止”

Ben*_*son 5 synology docker

我有一个带有一个 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我看到的情况dieexitCode=0

似乎我需要通过生成stop事件而不是die事件来向系统发出信号,表明预期退出。这是我可以在我的图像或docker start命令行上做的事情吗?

Ben*_*son 14

当满足以下两个条件时,Synology Docker 套件将生成通知Docker 容器 xxxx 意外停止:

  • 容器通过diedocker 事件退出(您可以通过监视docker events容器何时退出来看到这种情况发生)。这是容器中的主进程自行退出的任何情况。没关系exitCode
  • Synology Docker GUI 认为该容器“已启用”。该信息存储在: /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)

如何使用 Synology 的 Docker GUI 启用/禁用容器

如果您从 GUI 启动容器,则会自动启用它们。所有这些都会导致容器“启用”并在退出时开始通知:

  • 将容器视图中的“切换开关”滑动到“打开”
  • 在容器上使用 Action start。
  • 打开容器详细信息面板并单击“开始”

这可能就是您的容器最终“启用”的方式以及它现在每次退出时发出通知的原因。创建的容器在docker run -d ...​​开始时不会启用,并且最初不会在退出时发出警告。这可能就是为什么像docker run -it --rm busybox其他临时容器这样的东西不会引起通知。

如果在容器运行时停止它们,则可以禁用它们。似乎无法禁用当前已停止的容器。因此,要禁用容器,您必须启动它,然后在它自行退出之前停止它

  • 只要您愿意,就将切换开关打开然后关闭。
  • 使用“操作启动”,然后在允许的情况下立即停止(这很困难,因为如果您的容器寿命很短,则需要额外的点击)。
  • 打开控制器详细信息面板,单击开始,然后当“停止”未灰显时,单击“停止”。

通过查看来检查您的工作。/var/packages/Docker/etc/container_name.config

  • 感谢您的详细解释,但是没有实际的解决方案吗?就我而言,我正在使用任务计划程序运行容器。这不是“如果您从 GUI 启动它们”,但它仍然会产生此消息。Docker 容器通常意味着做一件事然后终止。我们可以采取什么措施来消除 Synology DS 中的此消息吗? (4认同)

Ton*_*one 6

在没有通知的情况下停止/启动容器的另一个选项是通过 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"

笔记:

  • 这些命令需要以 root 身份运行
  • 您将收到警告[Line 255] Not a json value: CONTAINER_NAME ,但命令有效并给出一条响应消息,指示"success" : true

我真的没有更多关于它的信息,因为我在 Reddit 帖子中偶然发现了它,并且没有太多支持它的信息,但它在 DSM 7.1.1-42962 上对我有用,并且我正在使用它预定任务。

来源和参考链接: