微服务启动的时候,会自动向服务注册中心报告自己的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-plugin1.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 activation1.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容器内端口随便用嘛_
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)