job for docker.service canceled(当 xxl-job 遇上 docker → 它晕了,我也乱了!)
开心一刻
公交车上 ,一位老大爷睡着了 ,身体依靠在背后的一位年轻小伙子身上
小伙子一直保持站姿十几分钟 ,直到老人下车
这位在校大学生 ,接受采访时说: ”当时就觉得背后这个人很轻盈 ,以为是个姑娘!“
前提准备
对 xxl-job 、docker 要有基本的了解
xxl-job
直接看官网:xxl-ob ,你想要的和不想要的 ,官网都有详细说明
楼主也做了简单尝试:分布式任务调度平台 → XXL-JOB 初探 、分布式任务调度平台 → XXL-JOB 实战
示例版本:2.1.0
docker
网上资料很多 ,b站视频也挺多的(推荐:尚硅谷2022版Docker实战教程(docker教程天花板))
楼主就不做介绍了(主要是楼主不知道呀!)
admin 和 executor 都单独部署
部署很简单 ,我就不具体演示了(不是主角,没戏份!)
直接看效果
192.168.8.222 上部署xxl-job-admin
192.168.8.223 上部署xxl-job-executor
是不是很简单?
效果也和我们预想的一样
admin 单独部署 ,executor通过 docker 部署
192.168.8.223 安装docker ,安装过程我就不演示了,直接看效果
docker版本20.10.21
大家注意 ,伴随着docker的运行 ,多了一个网卡配置信息
有兴趣的可以查阅下:docker网络的bridge模式;这里先混个眼熟,注意IP172.17.0.1
executor 和 docker 并存
此时我们重启下xxl-job-executor ,然后在xxl-job-admin重新注册下执行器
自动注册上来的机器IP是172.17.0.1 ,而非192.168.8.223 ,那么伴随而来的问题就是:xxl-job-admin访问不通xxl-job-executor
我们改成手动注册 ,看看能否访问通
可以看到 ,手动注册不受docker的影响 ,能正常访问通
而自动注册则受了docker的影响 ,注册的IP不对 ,至于如何解决 ,请继续往下看
executor 通过 docker 部署
如何打将xxl-job-executor打成docker镜像,不是本文的内容 ,所以省略不演示(言外之意是需要大家自行去学习!)
我们直接run执行器镜像
自动注册上来的IP172.17.0.2 ,很明显,问题(xxl-job-admin访问不通xxl-job-executor)再次出现
那改成手动注册试试
哟嚯 ,xxl-job-admin还是访问不通xxl-job-executor
放弃抵抗吧 ,别挣扎了
少年莫急,我们的xxl-job-executor是通过docker部署的 ,你有把docker容器的9999端口映射到宿主机吗
(由于换了地方 ,IP也跟着变了 ,192.168.8.222-> 10.5.13.222 ,192.168.8.223 ->10.5.13.223)
重启下sample-executor:1.0
我就问你 ,是不是通了?
admin 和 executor 都通过 docker 部署
executor通过docker部署 ,前面已经讲过了
admin通过docker部署 ,请看我表演
自动注册还要试吗?
自动注册IP问题
前面说了那么多 ,最终回归到一个问题:自动注册的IP为什么不是Docker宿主机的IP?
不管是xxl-job-admin还是xxl-job-executor ,都是直接用的官方的代码,楼主可一行都没改
那肯定是xxl-job自动注册没有做好docker的兼容呗
这可不是我瞎说 ,github上xxl-job有很多相关的issue(191、630 、1121 、1658 、1668)
许大大在源码中也给出了解决方案 ,xxl-job-executor-sample-springboot有个类:XxlJobConfig.java,其中有如下说明
那试试呗 ,我们对xxl-job-executor-sample-springboot进行改造
引入依赖
修改XxlJobConfig.java
添加配置
executor 和 docker 并存
docker运行 ,但executor不通过docker部署
自动注册的ip竟然是:127.0.0.1,莫非要通过docker部署?
executor 通过 docker 部署
镜像我已经打包好:sample-executor:1.1 ,我们来看下效果
自动注册的ip是172.17.0.2 ,不是宿主机ip:10.5.13.223 ,莫非docker镜像打的有问题?
我们进容器内看看日志
我们再看看容器内的网卡配置信息
请问这如何获取宿主机IP(10.5.13.223)?
许大欺我?
总结
1 、就目前来看 ,一旦xxl-job-executor遇上Docker ,自动注册就不对了
知道如何处理的小伙伴 ,欢迎评论区留言
2 、自动注册不行了 ,那就用手动注册呗
3 、大家自己验证的时候 ,一定要注意docker与宿主机的端口映射
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!