SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑

简介: SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑

如果不指定 xxl.job.executor.ip,默认会用 Docker 的IP,注册到 xxl-job 里面,这时候无法回调

如果xxl.job.executor.ip、xxl.job.executor.address 都赋值,就会出现没端口的情况,具体如下

 

 

 

原因  xxxl.job.ip 为空,默认给了 docker 的ip ,xxl-job-admin 无法回调到该地址,

Docker run 的时候,需要给定参数

"-Dxxl.job.executor.ip=xxljobexecutorip","Dxxl.job.executor.address=xxljobexecutorip","−Dxxl.job.executor.address={xxl_job_executor_ip}"

 

如果ip、address 都配了,就会出现下面问题,端口没了。

 

查看 xxl-job的源码找到原因

private void initEmbedServer(String address, String ip, int port, String appname, String accessToken) throws Exception {
        // fill ip port
        port = port>0?port: NetUtil.findAvailablePort(9999);
        ip = (ip!=null&&ip.trim().length()>0)?ip: IpUtil.getIp();
        // generate address
        if (address==null || address.trim().length()==0) {
            String ip_port_address = IpUtil.getIpPort(ip, port);   // registry-address:default use address to registry , otherwise use ip:port if address is null
            address = "http://{ip_port}/".replace("{ip_port}", ip_port_address);
        }
        // start
        embedServer = new EmbedServer();
        embedServer.start(address, port, appname, accessToken);
    }

解决如下:

将 -Dxxl.job.executor.ip=$LOCALHOST_IP  暴露出来(只给ip参数赋值),docker run 的时候将具体ip做为参数传进去

 

DockerFile

# Docker image for SpringBoot file run
# VERSION 0.0.1
# Author: Jimmy
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER Jimmy <Jimmy.Chen@vipsoft.com.cn>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD vipsoft-web-1.0.0.jar  app.jar
RUN bash -c 'touch /app.jar'
#把项目中的agent文件夹拷贝进行容器中的/usr/local/agent文件夹中
ADD agent /skywalking/agent/
#定义环境变量,供run的时候传参数给 jar
ENV PARAMS=""
#修改Docker时区-否则里面的时间会慢8小时
#通过文件链接的方式修改 时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV JAVA_OPTS=""
ENV SPRING_PROFILES_ACTIVE=""
ENV SKYWALKING_OAP_SERVER=""
ENV LOCALHOST_IP=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -javaagent:/skywalking/agent/skywalking-agent.jar -Dskywalking.collector.backend_service=$SKYWALKING_OAP_SERVER -Dxxl.job.executor.ip=$LOCALHOST_IP -Dskywalking.agent.service_name=vipsoft-web-$SPRING_PROFILES_ACTIVE -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

 

docker build -t vipsoft-web:1.0.0 .

 

docker run --name vipsoft-web-dev-17082 --restart always \
     -d -p 17082:7082 -p 1982:1982 -p 1682:1682 \
     -e SPRING_PROFILES_ACTIVE="dev" \
     -e LOCALHOST_IP="172.16.3.62" \
     -e SKYWALKING_OAP_SERVER="172.16.3.61:1800" \
     -v /opt/logs/vipsoft_web_dev/:/logs/ \
     vipsoft-web:1.0.0

 

目录
相关文章
|
13天前
|
运维 网络安全 持续交付
IDEA+Docker 远程一键部署项目:技术干货分享
【10月更文挑战第4天】在现代软件开发中,快速、可靠、自动化的部署流程是提升开发效率和运维质量的关键。IDEA(IntelliJ IDEA)作为Java开发者首选的IDE,结合Docker这一轻量级容器化技术,能够实现远程一键部署项目,极大地简化了开发到生产的流程。今天,我将和大家分享这一组合在工作学习中的实际应用和技术干货。
72 3
|
15天前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
8天前
|
JSON JavaScript 测试技术
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
【10月更文挑战第9天】使用Docker部署PPTist在线演示文稿应用
15 1
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
|
10天前
|
存储 前端开发 测试技术
【Docker项目实战】使用Docker部署Calcium网页计算器
【10月更文挑战第7天】使用Docker部署Calcium网页计算器
20 1
【Docker项目实战】使用Docker部署Calcium网页计算器
|
13天前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
【10月更文挑战第4天】使用Docker部署Radicale日历和联系人应用
53 2
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
|
15天前
|
人工智能 数据安全/隐私保护 虚拟化
Docker部署MaxKB详细步骤(window系统)
这篇文章详细介绍了如何在Windows系统上使用Docker部署MaxKB,并提供了从安装Docker到运行MaxKB容器的详细步骤,以及如何通过浏览器访问和配置MaxKB来使用ollama和llama3模型进行问答。
121 1
Docker部署MaxKB详细步骤(window系统)
|
10天前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
49 9
|
7天前
|
Web App开发 前端开发 测试技术
【Docker项目实战】使用docker部署tabler后台模版
【10月更文挑战第10天】使用docker部署tabler后台模版
19 0
【Docker项目实战】使用docker部署tabler后台模版
|
9天前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
22 0
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
16天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
41 3