首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过码头从领事值中设置容器参数?

如何通过码头从领事值中设置容器参数?
EN

Stack Overflow用户
提问于 2019-07-12 11:02:28
回答 1查看 961关注 0票数 0

我没有几个简单的java应用程序,我希望它们在运行时配置中使用领事。我不明白在这个组合中应该使用的方法: docker + consul +应用程序。

我已经成功地定制了一个带有所需容器的正确的docker-compose.yml文件:领事、jetty1、jetty2、jetty3。每个jetty都在构建时获得一个war应用程序。当我整理我的堆栈时,我启动了一个正确的应用程序。但是,我不明白我该怎么做才能让我的应用程序从领事服务中读取领事配置。

我制作了这样的docker-compose.yml文件:

代码语言:javascript
复制
version: '2'

services:
  consuldns:
    build: ./consul
    command: 'agent -server -bootstrap-expect=1 -ui -client=0.0.0.0 -node=consuldns -log-level=debug'
    ports:
      - '8300:8300'
      - '8301:8301'
      - '8302:8302'
      - '8400:8400'
      - '8500:8500'
      - '8600:53/udp'
    container_name: 'consuldns' 
  jettyok1:    
    build: ./jetty
    ports:
      - "8081:8080"     
    container_name: jettyok1  
    depends_on: 
      - consuldns
  jettyok2:    
    build: ./jetty
    ports:
      - "8082:8080"     
    container_name: jettyok2    
    depends_on: 
      - consuldns
  jettyok3:    
    build: ./jetty
    ports:
      - "8083:8080"     
    container_name: jettyok3
    depends_on: 
      - consuldns

我有两个文件夹附近的docker-compose.yml文件:-领事: Dockerfile (复制自官方回购)

代码语言:javascript
复制
FROM consul:latest

ENV CONSUL_TEMPLATE_VERSION 0.18.1

ADD https://releases.hashicorp.com/consul-template/${CONSUL_TEMPLATE_VERSION}/consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip /

RUN unzip consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
    mv consul-template /usr/local/bin/consul-template &&\
    rm -rf /consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
    mkdir -p /etc/consul-template/config.d/templates && \
    apk add --no-cache curl

RUN apk update && apk add --no-cache jq

RUN mkdir /etc/consul.d
RUN echo '{"service": {"name": "my_java_application", "tags": ["java"], "port": 8080}}' > /etc/consul.d/java.json
#RUN consul agent -data-dir /consul/data -config-dir /etc/consul.d

CMD ["agent", "-dev", "-client", "0.0.0.0"]
  • 码头:码头文件(手工制作)
代码语言:javascript
复制
FROM jetty:latest

ENV DEFAULT_SYSTEM_MESSAGE='dockerfile default message'

COPY \always-healthy.war /var/lib/jetty/webapps/

web是一个简单的spring引导web应用程序,只有一个GET方法支持:

代码语言:javascript
复制
package org.bajiepka.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.core.env.Environment;

@RestController
public class MessageController {

    @Autowired
    private Environment environment;

    @GetMapping("/message")
    public String getDefaultMessage(){
        return String.format("Current value: %s", environment.getProperty("DEFAULT_SYSTEM_MESSAGE"));
    }
}

请告诉我,我应该做什么,使我的始终健康的应用程序从领事服务中读取一个值,这样我就可以管理任何抛出实例或始终健康的应用程序的env参数DEFAULT_SYSTEM_MESSAGE。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 11:41:17

如果您正在使用Spring,您可以使用来使应用程序在启动时从领事加载配置。

参见示例和示例这里这里

如果您不使用spring,则需要使用rest客户端从领事获取配置,这样就需要做一些更多的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57005664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档