如果不指定 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