Docker容器化部署config-server无法直接访问
解决办法:spring.cloud.config.uri
1. 本机ip启动方式:
使用都是本地服务时,未使用docker方式部署。
spring:
application:
name: test-service
cloud:
config:
name: common-config,database-config,hbase-config,test-service
profile: dev
discovery:
enabled: true
service-id: config-server
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
serviceUrl:
# defaultZone: http://xx.xx.xx.xx:xx/eureka/,http://xx.xx.xx.xx:xx/eureka/
defaultZone: ${EUREKA_SERVER}
2. Docker容器启动
1)问题
Docker容器化部署之后,服务器服务对外的ipPort和Eureka里获取到的容器里真实的ipPort是不一致的;
访问服务时只能通过服务对外的ipPort访问,直接访问eureka里的ipPort会报错
2)解决办法
- 本机启动
spring:
application:
name: test-service
cloud:
config:
name: common-config,db-config,hbase-config,hdfs-config,test-service
profile: dev
uri: ${CONFIG_SERVER} #docker容器部署config-server对外的ipPort
#uri: http://xx.xx.xx.xx:xx/
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
metadata-map:
zone: 1234
client:
serviceUrl:
# defaultZone: http://xx.xx.xx.xx:xx/eureka/,http://xx.xx.xx.xx:xx/eureka/
defaultZone: ${EUREKA_SERVER}
metadata-map: zone 与serviceUrl同时存在时,默认会优先取同一个metadata-map: zone 内的服务,所以本地调试时可以把本地服务的eureka.instance.metadata-map.zone设置为 1234等,以避免影响正常的服务接口调用
- 服务器启动俩种方式
方式1
spring:
application:
name: test-service
cloud:
config:
name: common-config,db-config,hbase-config,hdfs-config,test-service
profile: dev
uri: ${CONFIG_SERVER}
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
serviceUrl:
defaultZone: ${EUREKA_SERVER}
方式2
spring:
application:
name: test-service
cloud:
config:
name: common-config,database-config,hbase-config,test-service
profile: dev
discovery:
enabled: true
service-id: config-server
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
serviceUrl:
defaultZone: ${EUREKA_SERVER}
#defaultZone: http://xx.xx.xx.xx:xx/eureka/,http://xx.xx.xx.xx:xx/eureka/
3. dockerfile 示例
FROM 基础镜像
MAINTAINNER 维护者 姓名邮箱
ADD 添加jar包、bootstrap.xml
ENV 设置日期时区
ENTRYPOINT 用于设定容器启动时第一个运行的命令及其参数。
FROM registry.xxx.com/base/java:1.8
MAINTAINER xxx "xxx@qq.com"
ADD target/xxx-xxx-0.0.1.jar xxx-xxx-0.0.1.jar
ADD src/main/resources/bootstrap.yml bootstrap.yml
ENV lang en_Us.utf8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENTRYPOINT java ${JVM_PARAMS:=-Xms4g –Xmx4g} -jar xxx-xxx-0.0.1.jar
4. JVM参数可配置
-
方式一
dockfile 中直接启动服务的如下配置即可;
环境变量 JVM_PARAMS= 配置 例如:-Xms8g –Xmx8g
-Xmx 最大内存 -Xms最小内存
ENTRYPOINT java ${JVM_PARAMS:=-Xms4g –Xmx4g} –jar xxxxxx.jar 注: -Xms4g –Xmx4g 为默认值
-
方式二
dockfile 中调用shell 脚本启动的
ENTRYPOINT ./shell.sh “${JVM_PARAMS:=-Xms4g –Xmx4g}” 注:双引号必须的
shell.sh如下
java $1 -jar test-service-0.0.1.jar
5. 排查问题
查看服务进程id: ps aux | grep java
查看分配内存及使用情况: jmap -heap pid
查看占用内存: top (寻找对应进程的)