先说一下背景,在服务器上运行着几个docker容器,分别承担着nginx、mysql、go、php、python,具体架构设计初衷暂且不管,有个需求是需要用python脚本去定时采集数据。
宿主机上没有配置python也没有mysql所以只能吧采集任务放在python容器上。问题:如果在python容器内设置计划任务,未免搞的太复杂,容器对计划任务的支持不是太好。所以吧计划任务放在宿主机上更好。
那么问题来了,怎样在宿主机上去执行docker上的脚本?
仔细阅读docker帮助和linux命令说明之后可以大概明白执行过程,直接放脚本:
*/1 * * * * docker exec python /bin/bash -c ‘/bin/bash /www/python/diyikaoshi/spider.sh >> /www/python/diyikaoshi/splog.log’
计划任务执行的时间设置不用说明,这里使用的是示例每分钟执行一次;
对这条命令行的普通话解释就是: 没分钟执行一次 docker …… /splog.log’ 的命令
这里需要注意的有下面几点:
1. 在命令行要写脚本的全部路径,
2.如果需要执行多个命令则需要用 && 分割
3.在脚本中也要写全路径,如果不写全路径会执行失败
4.命令行中一定不能带 -it 参数, -it 是打开一个新终端,docker你懂得…… ,会直接冷冰冰的告诉你错了
5.如果执行shell脚本,要指定使用的是哪个sh,我这里指名要用 /bin/bash
6.如果shell脚本中涉及到环境变量,或者提示JAVA_HOME is not set,可以在脚本中加上以下命令:export JAVA_HOME=jdk路径
对于其他的需要在宿主机直接执行docker内的命令,可参考上面的这种方式
如需转载请注明: 转载自26点的博客
本文链接地址: 在宿主机上执行docker中的脚本
转载请注明:26点的博客 » 在宿主机上执行docker中的脚本
优化吗