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=${xxl_job_executor_ip}","-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
SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑的更多相关文章
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- .NET Core 3.0 部署在docker上运行
自从.NET Core3.0发布之后,写了几篇关于.NET Core 3.0的文章,有助于你快速入门.NET Core3.0. 本篇文章主要讲解如何一步步创建一个mvc项目,然后发布并部署在Docke ...
- 六、.net core (.NET 6)程序部署到Docker上
使用Docker部署应用程序 首先确保已经安装Docker 桌面软件,如下图: 然后,把需要部署到Docker上面的项目,咱们先添加Docker的支持,启动项目右键 -> 添加 -> Do ...
- 项目部署到Linux上遇到的坑
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.本地Navicat for MySQL无法连接至服务器(Centos 7 x86_64 bbr) 1045错误: 解决步骤: 1.查看用户名密 ...
- 【Step By Step】将Dotnet Core部署到Docker上
本教程的前提是,你已经在Linux服务器上已经成功的安装了Docker,我会大概介绍在此过程中用到的Docker命令,并不会介绍所有的Docker命令(因为我也不会). 一.在Docker中运行Dot ...
- SpringBoot应用部署到Docker上(docker-io版本)
配置TCP远程连接 为什么要配置这个呢,因为用到的docker-maven-plugin插件默认连接到localhost:2375上的docker.然而:1. 我们的Docker不在本地,执行打包命令 ...
- SpringBoot应用部署到Docker上(docker-ce版本)
配置TCP远程连接(docker-maven-plugin插件连接的地址) # 加上红色标识的部分[root@localhost admin]# vim /lib/systemd/system/doc ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core—使用.Net Core + Entity FrameWor ...
- eShopOnContainers部署在docker的坑
把eShopOnContainers(.net core 的版本是2.1)下载之后,部署到docker上,查看容器eShopOnContainers的项目都部署上去了. 用http://localho ...
- calico在docker上的部署及验证
1. 背景 以下的部署以五台服务器环境为例: 服务器1: hostname为etcdnode1, IP为192.168.56.100 服务器2: hostname为etcdnode2, IP为192. ...
随机推荐
- Util应用框架基础(六) - 日志记录(一) - 正文
本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core ...
- 微服务系列-使用WebFlux的WebClient进行Spring Boot 微服务通信示例
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 概述 在之前的教程中,我们看到了使用 RestTemplate 的 Spring Boot 微服务通信示例. 从 5.0 ...
- 深入理解RC4加密算法
RC4(Rivest Cipher 4)是一种广泛应用的加密算法,由Ronald L. Rivest于1987年发明.它是一种流密码(stream cipher)算法,适用于对网络通信中的数据进行加密 ...
- 【源码系列#03】Vue3计算属性原理(Computed)
专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 语法 传入一个 getter 函数,返回一个默认不可手动修改的 ref ...
- vue + node 前后端分离项目解决跨域问题
vue + node 前后端分离项目解决跨域问题 由于前端 和 后端 项目运行于不同端口,无法直接传递数据 后端 app.js 添加如下代码 var cors = require('cors') ap ...
- 基于Redis的简易延时队列
基于Redis的简易延时队列 一.背景 在实际的业务场景中,经常会遇到需要延时处理的业务,比如订单超时未支付,需要取消订单,或者是用户注册后,需要在一段时间内激活账号,否则账号失效等等.这些业务场景都 ...
- [ABC264F] Monochromatic Path
Problem Statement We have a grid with $H$ rows and $W$ columns. Each square is painted either white ...
- 14、Map
1.Map的定义 map是Go中的内置类型,它将一个值与一个键关联起来.可以使用相应的键检索值.Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引 ...
- 安卓之各种Adapter优劣分析
文章摘要 在 Android 开发中,适配器(Adapter)是一种非常重要的设计模式,它用于将数据与视图组件进行绑定.适配器可以帮助我们在不同的视图组件(如 ListView.GridView.Re ...
- MySQL运维12-Mycat分库分表之按天分片
一.按天分片 指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中. 说明1 ...