奇怪的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
发表评论