docker springcloud 微服务 eureka集群

之前集群各种配置,可以调用服务,但是服务的url 在这里unavailable-replicas 一直出现,意味着不可用。经过各种尝试,最终,还是通过这个hostname的方式进行集群,但应用服务,还是通过IP进行集群调用。

各种失败,百度好久,最终找到一篇文章后。问题解决。之前的困惑是docker容器如何设置hosts文件。

参考文章:https://blog.csdn.net/benben_2015/article/details/88426438

 

最终发布的脚本这样写。

// 定义一个URL,就是集群地址。
UREKA_SERVICEURL="http://test8761:8761/eureka/,http://test8762:8762/eureka/,http://test8763:8763/eureka/"
运行服务
sh "docker run --restart=always -p 8761:8761 "+ "-d -v ${LOG_PATH}:${LOG_PATH} "+
// 注册中心地址 "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
// 容器名称 "-e eureka.instance.hostname=test8761 "+
// 重点是下面这行,host文件增加3个地址。最终进入到容器中中的/etc/hosts文件也看到了这3个地址。 "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+ "--name ${PROJECT_NAME} "+ " $REPOSITORY"

 进入容器查看

[root@master ~]# docker ps ==========查看所有运行中的容器
CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
7e8a4101623c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8763->8761/tcp   eureka8763
707bb1f2dc5c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8762->8761/tcp   eureka8762
24636b410d2d        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8761->8761/tcp  eureka
[root@master ~]# docker exec -it 24636b410d2d /bin/bash  ===========进入容器
root@24636b410d2d:/# cat /etc/host  =======查看hosts文件
host.conf    hostname     hosts        hosts.allow  hosts.deny   
root@24636b410d2d:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.89.130  test8761
192.168.89.130  test8762
192.168.89.130  test8763
172.17.0.3      24636b410d2d
root@24636b410d2d:/# 

 

 完整的pipeline发布脚本

node("${nodeTag}")  {
// docker 私有仓库注册中心
def REGISTRY_URL="192.168.89.132"
def REGISTRY_UID="admin"
def REGISTRY_PID="test12345"
// 私有仓库主目录名称
def MAIN_NAME="test-cloud"
// 项目目录所在目录
def PROJECT_NAME="${projectName}"
// 项目版本号
def PROJECT_VERSION="0.0.1-SNAPSHOT"
// 镜像名称
def REPOSITORY="${REGISTRY_URL}/${MAIN_NAME}/${PROJECT_NAME}:${PROJECT_VERSION}"
// 日志路径
def LOG_PATH="/home/date/logs/${PROJECT_NAME}/"
// host地址
def CONFIG_HOST="192.168.89.130"
def EUREKA_HOST_A="192.168.89.130"
def EUREKA_HOST_B="192.168.89.130"
def EUREKA_HOST_C="192.168.89.130"
def EUREKA_PORT_A="8761"
def EUREKA_PORT_B="8762"
def EUREKA_PORT_C="8763"
// 注册中心eureka地址
def EUREKA_SERVICEURL="http://${EUREKA_HOST_A}:${EUREKA_PORT_A}/eureka/,http://${EUREKA_HOST_B}:${EUREKA_PORT_B}/eureka/,http://${EUREKA_HOST_C}:${EUREKA_PORT_C}/eureka/"
    stage('start') {
        sh "date +'%Y-%m-%d %H:%M:%S'"
    }
    stage("1、clear ${PROJECT_NAME}") {
        echo "clearing ${PROJECT_NAME}..."     
        sh "docker stop ${PROJECT_NAME} |true"     
        sh "docker rm -f ${PROJECT_NAME} |true"     
        sh "docker image rm $REPOSITORY |true"     
    }
   stage("2、deploy ${PROJECT_NAME}") {
     echo "deploying ${PROJECT_NAME}..."     
    sh "docker login -u ${REGISTRY_UID} -p ${REGISTRY_PID} ${REGISTRY_URL}"
     if (PROJECT_NAME == "test-base-eureka") {
        EUREKA_SERVICEURL="http://test${EUREKA_PORT_A}:${EUREKA_PORT_A}/eureka/,http://test${EUREKA_PORT_B}:${EUREKA_PORT_B}/eureka/,http://test${EUREKA_PORT_C}:${EUREKA_PORT_C}/eureka/"
        
        sh "docker run  --restart=always -p ${EUREKA_PORT_A}:8761 "+
        "-d -v ${LOG_PATH}${EUREKA_PORT_A}:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test${EUREKA_PORT_A} "+
        "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
        "--name ${PROJECT_NAME} "+
        " $REPOSITORY"
        
        sh "docker rm -f ${PROJECT_NAME}${EUREKA_PORT_B} |true"     
        sh "docker run  --restart=always -p ${EUREKA_PORT_B}:8761 "+
        "-d -v ${LOG_PATH}${EUREKA_PORT_B}:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test${EUREKA_PORT_B} "+
        "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
        "--name ${PROJECT_NAME}${EUREKA_PORT_B} "+
        " $REPOSITORY"
        
        sh "docker rm -f ${PROJECT_NAME}${EUREKA_PORT_C} |true"     
        sh "docker run  --restart=always -p ${EUREKA_PORT_C}:8761 "+
        "-d -v ${LOG_PATH}${EUREKA_PORT_C}:${LOG_PATH} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "-e eureka.instance.hostname=test${EUREKA_PORT_C} "+
        "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
        "--name ${PROJECT_NAME}${EUREKA_PORT_C} "+
        " $REPOSITORY"
        
     } else if (PROJECT_NAME == "test-base-config") {
       sh "docker run --restart=always -p 8888:8888 "+
        "-d -v ${LOG_PATH}:${LOG_PATH} "+
        "-e eureka.instance.ip-address=${CONFIG_HOST} "+
        "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
        "--name ${PROJECT_NAME} "+
        " $REPOSITORY"
     } else {
       error '请选择要发布的分支'
     }
   }
    stage('Results 3') {
        echo "finish ${PROJECT_NAME}"
    }
    stage('end') {
        sh "date +'%Y-%m-%d %H:%M:%S'"
        echo "本次运行时间: ${currentBuild.duration} test"
    }
}

 

posted on 2020-03-17 18:40  陈惟鲜的博客  阅读(493)  评论(0编辑  收藏  举报

导航