一、问题简述

我是用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!


如果还有其他问题,请在评论区告诉我!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐