如何让 Docker 在一段时间后重启容器?



如何在一段时间没有用户输入的情况下重新启动在 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后,申请成功或失败。在大多数情况下,它会连续运行。因此,对于其他情况,我想在一段时间后简单地重新启动整个应用程序。

install node cron

$ npm install --save node-cron

导入 node-cron 并计划任务:var cron = require('node-cron'(;

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

结合 ivanvanderbyl 的以下内容。

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

关于ENTRYPOINT的官方文档,在一个容器中运行多个服务并阅读了一堆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进程并重新启动它。正是我想要的。

最新更新