Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx
使用Docker 部署的xxl-job,当调度中心和执行器部署在不同的容器内,此时xxl-job调用执行器的服务就会报:
address:http://172.0.0.1:8841/
code:500
msg:xxl-rpc remoting error(connect timed out), for url : http://172.0.0.1:8841/run
经过排查和询问度娘,发现是执行器的服务被调用的接口没有在docker容器进行映射,也就是图中的8841端口。
另外,Docker容器默认使用 bridge 模式的网络。该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内。Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部。
在bridge网络模式下,容器之间相互访问,用自动注册的ip就会失败,应该用Docker容器的桥接 ip:172.17.0.1
。
问题解决:
- 把xxl-job执行器通过netty服务启动的端口进行映射,图上的8841端口
- 在xxl-job调度中心的页面,把执行器的注册方式由自动改为手动
ip:172.17.0.1
最后,调用成功!!!
我是阿廷,一个相信努力可以改变人生的人,我相信一切的上进行为都是值得的,至少可以让我看见更大的世界。