一、问题简述
我是用docker部署的xxl-job,然后用在了宿主机的本地项目上。
执行器我选的是自动注册,所以执行器的地址也就和本地项目上的yaml配置文件有关:
xxl-job:
access-token: Yilena
admin:
addresses: http://192.168.xx.xx:9001/xxl-job-admin
executor:
application-name: test-executor
log-retention-days: 30
port: 19999
但是手动执行任务时一直失败:
一番查阅后找到了具体原因:
Docker部署xxl-job时会给其创建一个虚拟网卡,该IP属于内部网段,是无法被外部服务所访问的。而执行器自动注册的话默认是到这个网段里面去寻找端口的,因跨网段不可达,所以返回连接超时报错。
二、解决方案
(一)手动更改IP
既然无法访问虚拟网卡,那我们直接手动配置为宿主机的IP就好了,宿主机的网段是公网可路由地址,可以被外部服务所访问到,可以在yaml文件配置宿主机IP或者直接在xxl-job的后台网页上手动配置执行器的IP。
xxl-job:
access-token: Yilena
admin:
addresses: http://192.168.xx.xx:9001/xxl-job-admin
executor:
ip: 192.168.xx.xx(宿主机IP)
application-name: test-executor
log-retention-days: 30
port: 19999
(二)更改Docker网段
在启动Dokcer容器时指定网络命名空间:--network=host
让该容器共享宿主机的网段即可。
注意宿主机的ip如果设置了自动获取的话,那隔一段时间就会发生变化,请定期更改执行器的ip!
如果还有其他问题,请在评论区告诉我!