如何让Docker在一段时间后重启一个Container?

时间:2017-07-25 06:11:55

标签: node.js automation scheduled-tasks dockerfile headless

如何在没有用户输入(自动化)一段时间后重新启动在docker容器内运行的Node JS应用程序?

我有一个Docker容器和一个应用程序,其底层架构显示偶尔挂起。我们的想法是在一段时间后重新启动应用程序。这应该都是自动化的。请考虑以下Dockerfile。

FROM node:6.11.1
ENV HOME=/usr/src/app/
# Create app directory
RUN mkdir -p $HOME
WORKDIR $HOME
COPY npm-shrinkwrap.json $HOME
RUN npm install
# Bundle app source
COPY . $HOME
EXPOSE 3000
CMD ["npm", "start"]

npm start申请成功后是否成功。在大多数情况下,它会成功运行。因此,对于其他情况,我想在一段时间后重新启动整个应用程序。

2 个答案:

答案 0 :(得分:1)

安装Node cron

$ npm install --save node-cron

导入node-cron并安排任务:  var cron = require('node-cron');

cron.schedule('* * * * *', function(){
  console.log('running a task every minute');
});

答案 1 :(得分:1)

结合ivanvanderbyl中的以下内容。

COPY entrypoint.sh /entrypoint
RUN chmod +x /entrypoint
ENTRYPOINT ["/entrypoint", "node", "--harmony-async-await"]

关于ENTRYPOINTRun multiple services in a container的官方文档以及阅读一系列Bash教程,我想出了以下解决方案。

#!/bin/bash
echo " # Starting Scraper"
node index.js -D
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start node: $status"
  exit $status
fi
echo " # Init Restart-Routine. Beware, console will freeze!"
while :
do
  echo "[1]/[4] Sleep"
  sleep 5
  echo "[2]/[4] Kill node process"
  pkill -f "node index.js"
  echo "[3]/[4] Sleep 2 seconds to make sure everything is down"
  sleep 2
  echo "[4]/[4] Start NodeJS"
  node index.js
done

最终产品执行以下操作:当我启动Docker时,它启动我的节点应用程序,并在一段时间后终止节点进程但不停靠docker进程并重新启动它。正是我在寻找什么。