我有一个带有一个 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
命令行上做的事情吗?
我有一个 docker-compose.yml 启动多个容器。其中之一使用 Dockerimage 文件来安装该容器中所需的所有内容。
我想添加一个每次等待中断信号 0、9 和 137 时运行的脚本。
现在,我尝试将脚本作为 Dockerimage 文件中的入口点运行,但似乎不起作用。
这是 Dockerimage 文件的内容:
RUN apt-get update && [...]
WORKDIR "/application"
ENTRYPOINT ["/bin/bash", "-c", "/application/scripts/cl.sh"]
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?我需要使用以下命令重建容器吗?
docker-compose build
Run Code Online (Sandbox Code Playgroud)
这是bash脚本cl.sh的内容
#!/bin/bash
echo "HELLO HELLO HELLO HELLO"
trap 'echo "Exiting with a 137 signal."' 137 0 9
Run Code Online (Sandbox Code Playgroud)
目前该脚本的唯一目的是测试所有功能。
当我将应用程序设置为通过 运行时docker-compose up
,需要几秒钟才能在 ctrl+c 上停止。但是,如果我运行docker kill ...
,容器会很快停止。当通过 ctrl+c 杀死时,我可以做些什么来加速容器关闭docker-compose up
?
特别是,当 docker-compose 说它“正常停止”时,这实际上意味着什么?docker-compose 是否尝试了一些关闭协议,然后仅在超时后才终止我的容器?