使用 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 的容器环境。

相关推荐
打工仔折腾 AI7 小时前
Prometheus接入Pushgateway实战:二进制与Docker部署、指标推送与远程写入
后端·python·docker·容器·性能优化·prometheus·ai agent 实战
xianyuCcCcCCCcc7 小时前
Docker 容器与网络
网络·docker·容器
誰能久伴不乏18 小时前
保姆级 Docker 入门教程
docker·容器·eureka
vipxieliang1 天前
Docker vs Podman vs containerd:容器运行时全景
docker·容器
vipxieliang1 天前
数据持久化方案:卷、挂载、权限与备份恢复
docker·容器
vipxieliang1 天前
Compose 生产级配置:从 demo 到可上线
docker
vipxieliang1 天前
容器原理揭秘:namespace、cgroup 与镜像分层
docker·容器
java_logo1 天前
Docker 部署 dockurr/windows:轻松搭建浏览器可控 Windows 虚拟机
运维·windows·docker·容器·虚拟机·kvm·轩辕镜像
谢亮_vipxieliang1 天前
私有镜像仓库:Registry、Harbor 与镜像同步实战
网络·docker·容器
努力努力再努力wz1 天前
【边缘计算入门系列】从“在哪里算”到“怎么算”:一文建立边缘计算、算子、计算图与 Tensor 的底层心智模型
人工智能·docker·边缘计算