zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Docker容器化部署config-server无法直接访问

Dockerserver部署容器 访问 无法 直接 config
2023-09-27 14:26:27 时间

解决办法: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 (寻找对应进程的)

参考: