使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址

解决方案:使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址

在使用容器化方式注册 XXL-Job 执行器时,由于容器的 IP 地址是动态分配的,可能会导致调度中心无法访问执行器。为了解决这个问题,可以使用 Dockerfile 和启动脚本的方式来动态获取容器的 IP 地址,并正确注册到 XXL-Job。

在华为云容器化服务中,XXL-Job 执行器自动注册的 IP 地址通常是 http://169.254.1.1:xxxx/,这个地址任务调度器无法访问。

分布式部署的方式手动去填写ip地址肯定不行,因为这个ip地址每次都是变动的。

所以,需要的方案也很简单,就是在容器启动的时候,获取容器的ip地址,然后在启动java服务时,把ip作为一个向xxl-job注册时的参数就行,具体如下:

方式一:

这样写更方便,就不用多出一个脚本了

bash 复制代码
CMD ["sh", "-c", "EXECUTOR_IP=$(hostname -i) && java -jar xxl-job-executor-1.0.0.jar --spring.profiles.active=prod --xxl.job.executor.ip=$EXECUTOR_IP"]

方式二:

这种方式麻烦点,但如果原先本来就有其他启动脚本的,这样改起来也更清晰。

1. 编写启动脚本

首先,在项目根目录下创建一个 start.sh 启动脚本,用于动态获取容器的 IP 地址并启动 XXL-Job 执行器:

bash 复制代码
#!/bin/bash
EXECUTOR_IP=$(hostname -i)
java -jar xxl-job-executor-1.0.0.jar --spring.profiles.active=prod --xxl.job.executor.ip=$EXECUTOR_IP

此脚本通过 hostname -i 动态获取容器的 IP 地址,并将其传递给 XXL-Job 执行器启动命令中的 xxl.job.executor.ip 参数。

2. 修改 Dockerfile

Dockerfile 中,将启动脚本复制到容器中并设置为入口命令:

Dockerfile 复制代码
FROM eclipse-temurin:17.0.11_9-jre

ARG path

# 创建工作目录
RUN mkdir -p /home/work/
WORKDIR /home/work

# 下载并解压 XXL-Job 执行器
RUN wget $path -O /home/work/xxl-job-executor.tgz
RUN tar -zxvf /home/work/xxl-job-executor.tgz -C /home/work/

# 复制启动脚本到容器
COPY start.sh /home/work/start.sh
RUN chmod +x /home/work/start.sh

# 暴露执行器的端口
EXPOSE 8082

# 设置启动脚本为入口点
ENTRYPOINT ["/home/work/start.sh"]
3. 说明
  • 启动脚本:确保容器启动时动态获取正确的 IP 地址,并将其传递给 XXL-Job 执行器。
  • Dockerfile :配置了启动脚本的路径,并使用 ENTRYPOINT 命令确保脚本在容器启动时执行。
直接在Dockerfile中执行命令
4. 总结

通过这种方式,容器在启动时会动态获取自身的 IP 地址,并将其正确注册到 XXL-Job 中,解决了动态 IP 地址在调度回调时无法访问的问题。这种方法适用于在 Kubernetes 或 Docker Swarm 中部署多个动态 IP 的容器环境。

相关推荐
全栈攻略8 小时前
Docker 中 ROS2 工作流 Topic 验证与常用命令指南
运维·docker·容器
名字还没想好☜11 小时前
Docker 数据卷实战:volume、bind mount、tmpfs 到底怎么选,数据持久化与权限坑
运维·docker·容器·kubernetes
唐青枫11 小时前
Docker diff 详解:看清容器里到底改了什么
docker
lpfasd12313 小时前
Docker存储清理与防膨胀实践
运维·docker·容器
weixin_4445793014 小时前
Docker(下):镜像仓库管理
运维·docker·容器
DreamLife☼14 小时前
Agent开发环境搭建完全指南
python·docker·typescript·node·工业知识点
探索云原生14 小时前
Kueue + HAMi vGPU 实战:显存与算力配额管理
docker·ai·云原生·kubernetes·gpu
hoho_1215 小时前
docker中升级mysql到最新版本
mysql·docker·容器
cpolar技术支持15 小时前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
广州灵眸科技有限公司16 小时前
瑞芯微(EASY EAI)RV1126B 星闪使用
运维·人工智能·科技·docker·容器