使用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

最后,調用成功!!!

