Docker上微服务注册与发现

Docker上微服务注册与发现,第1张

Docker上微服务注册与发现

微服务启动的时候,会自动向服务注册中心报告自己的ip和端口。但是服务是在docker容器内运行的,注册的ip就成了172开头的docker内部ip, 这个地址是无法被其它机器访问的。

本文介绍如何把Docker里的微服务暴露在服务中心上,以便客户端的调用。

修改application.yml
    设置一个server.ip的变量,可以为空,用于nacos注册。非Docker环境值为空,nacos会自动获取本机IP作为注册IP;Docker环境下,ip通过Docker变量传入Docker主机的IP做为注册IP。把spring.cloud.nacos.discovery.ip设置为${server.ip}把spring.cloud.nacos.discovery.port设置为${server.port},缺省情况下为9082,可以通过Docker变量传入Docker主机的映射port,这样就可以把Docker主机映射端口作为注册端口。

具体样例如下:

server:
  port: 9082 #端口号
  ip:
spring:
  application.name: xxx-engine
  cloud.nacos.discovery:
    server-addr: 10.0.0.8:8848
    group: local
    ip: ${server.ip}
    port: ${server.port}
修改docker-plugin

增加HOST, PORT变量,以便传入Docker host的IP和映射端口。


    com.spotify
    docker-maven-plugin
    1.2.0
    
        ford.cn/csre-${project.artifactId}
        openjdk:11.0.13-oraclelinux8
        ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom 
            -Dserver.ip=$HOST -Dserver.port=$PORT -Duser.timezone=Asia/Shanghai 
            -jar /usr/app/${project.build.finalName}.jar --spring.profiles.active=$PROFILES"]
        
        /usr/app
        
            ${project.version}
            latest
        
        $PORT
        
            prod
            127.0.0.1
            8080
            -Xms512m -Xmx512m -Xss1024K -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=512m
        
        
        
            
                /usr/app
                ${project.build.directory}
                ${project.build.finalName}.jar
            
        
    
    
        
            javax.activation
            activation
            1.1.1
        
    

这样设置后可以构建Docker镜像了。

Docker运行

Docker镜像构建好后,必须要传入HOST和PORT两个变量,

HOSTNAME="192.168.0.118"
docker run -d -e "PROFILES=sit" -e "HOST=$HOSTNAME" -e "PORT=9091" -p:9091:9091 --name engine1  johnny2002/xxx-engine
docker run -d -e "PROFILES=sit" -e "HOST=$HOSTNAME" -e "PORT=9092" -p:9092:9092 --name engine2  johnny2002/xxx-engine
docker run -d -e "PROFILES=sit" -e "HOST=$HOSTNAME" -e "PORT=9093" -p:9093:9093 --name engine3  johnny2002/xxx-engine

注:为了简化配置项,保持内外端口一致,反正Docker容器内端口随便用嘛_

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存