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 (寻找对应进程的)

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值