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

相关推荐
追风林5 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
城南vision7 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge7 小时前
Docker篇(Docker Compose)
运维·docker·容器
梦魇梦狸º11 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉11 小时前
docker+mysql配置
mysql·adb·docker
詹姆斯爱研究Java11 小时前
Docker 的基本概念和优势
docker
南猿北者13 小时前
docker镜像仓库常用命令
运维·docker·容器
杨浦老苏13 小时前
Docker可视化管理面板DPanel的安装
运维·docker·群晖
航月15 小时前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb
微刻时光15 小时前
Docker镜像分成
java·运维·开发语言·docker·容器·镜像