docker部署服务无法自动注册xxl-job问题排查和解决

最近部署了一个服务,使用docker部署(network:host模式),2个节点的服务自动注册xxl-job,但是测试环境没有问题,生产环境一直注册失败,虽然可以在项目配置中使用**"** 类似这样的配置**"**:job.executor.address=ip:port 将地址写死,但是目前不支持写多个地址,那么任务执行只有一个节点,有单点故障且效率不高问题。

问题排查:

生产环境自动注册时,注册上的地址是:172.10.x.x, 这是服务器网桥的网卡。当docker容器使用bridge模式时会使用容器的ip。于是查看生产服务器的网络模式如下:

复制代码
docker network ls

发现目标服务默认使用的是网桥模式,查看当前容器的网桥模式进行确认:

复制代码
docker inspect itda-business|grep host

发现目前使用的是主机模式, 于是重启docker服务:

复制代码
service docker restart

但是结果自动注册的还是: 172.10.x.x,对比查看测试环境服务的网络模式:

复制代码
docker network ls

虽然有几个无关的前端服务默认是网桥模式,但是网桥模式中并没有看到目标服务。不确定是什么原因导致生产服务器主机模式无法生效。思考目前的现状是:docker部署都是基于主机模式,于是将生产服务器的网桥进行删除,解决了该问题。删除网桥的脚本如下:

bash 复制代码
#!/bin/bash
#本脚本删除的是br-开头的网桥
BRIDGE_LIST=$(sudo brctl show | cut -f 1 | grep br-)
echo "即将删除的网桥是:"$BRIDGE_LIST
for i in $BRIDGE_LIST
do
    sudo ifconfig $i down
    sudo brctl delbr $i
done
echo "删除之后用主机网桥状态如下:"
echo sudo brctl show

需要注意的是,如果有其他服务没有配置network,默认是网桥模式,还需要再重新生成docker, 否则网桥模式的服务不可用。即使服务器又配置了网桥,之前的目标服务仍然是主机模式哈。

复制代码
docker stop xxx-business && docker rm xxx-business && docker-compose up -d

参考文章:

https://blog.51cto.com/u_16213382/7451505

https://www.cnblogs.com/chenxiaoy/p/10016801.html

相关推荐
江湖有缘21 小时前
Docker环境下使用RustScan端口扫描工具教程
运维·docker·容器
70asunflower21 小时前
镜像仓库(Image Registries)详解
linux·docker·容器
青树寒鸦21 小时前
wsl的docker备份redis和迁移
redis·docker·容器
岩屿21 小时前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
hopsky1 天前
限制 Docker Desktop 的资源使用
运维·docker·容器
春日见1 天前
docker崩溃,闪退,与vscode断开连接
vscode·docker·容器
为什么不问问神奇的海螺呢丶1 天前
n9e categraf k8s监控配置-n9e k8s监控看板
java·容器·kubernetes
Suchadar1 天前
Docker搭建Web测试靶场
运维·docker·容器
Cyber4K1 天前
【Kubernetes专项】K8s 配置管理中心 ConfigMap 实现微服务配置管理
微服务·云原生·容器·kubernetes
fleaxin1 天前
统信服务器操作系统V20(1070)安装过程
docker·操作系统·nvidia·统信