奇怪的docker定时执行异常

缘起

最近在docker里运行了一些脚本,但是不想docker容器一直运行,所以准备用crontab定期来做。

过程

通过在crontab里设置定时运行docker命令的方式达到自动运行,然后使用docker命令关闭容器,整体的脚本如下:

    sudo docker start conta
    
    sudo docker exec -it conta bash -c "cd /mnt/xxx && ./xx.sh"
    
    sudo docker stop conta

但是最终发现,手动在命令行执行这个脚本,能够正常运行,放到crontab里后,每次都运行不成功,容器刚刚start就stop了。

通过日志发现,是docker exec这个步骤很快就结束,然后整个脚本运行结束。

通过网上查找,发现有类似的问题,说是因为exec的-i参数的问题,会导致在crontab里失败,见https://stackoverflow.com/questions/37089033/docker-exec-is-not-working-in-cron

因此最后的解决方法,就是去除-i参数,只使用-t参数即可,这个原因应该是-i是交互式的命令行,但是在crontabl环境下是没有的,导致失败。

总结

其实有的时候看起来奇怪的问题,得通过调试/日志发现具体出错的点,否则表面上看,不清楚是容器start问题,还是执行问题。

参考文档

https://stackoverflow.com/questions/37089033/docker-exec-is-not-working-in-cron


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。