如何使用progrium / consul check-http脚本使用SERVICE_CHECK_HTTP?

我正在用gliderlabs / registrator容器运行progrium / consul容器。 我希望能够自动创build任何已注册与注册人协调的容器的健康检查。 使用这个我想使用领事健康检查知道是否有任何容器已经停止运行。 我已经读过,有一种方法可以通过添加环境variables来做到这一点,但是我所读到的一切都太模糊了,比如下面的post:

如何在一个consul容器中为同一主机上的服务定义HTTP健康检查?

所以我应该设置一些环境variables:

ENV SERVICE_CHECK_HTTP=/howareyou ENV SERVICE_CHECK_INTERVAL=5s 

我把它们放在我的progrium / consul容器或我的gliderlabs /注册者里面吗? 我可以通过在Docker运行命令中添加下面的标签来设置它们吗?

 docker run ...... -e SERVICE_CHECK_HTTP=howareyou -e SERVICE_CHECK_INTERVAL=5s ...... 

注意:由于某种原因,将上述环境variables添加到注册器的docker run命令中,导致领事认为我的节点no acks received

我的Spring Boot应用程序通过三种方式获得Consul Health Checks和Gliderlabs Registrator的工作:

  • 将环境variables放在Dockerfile中使用ENVLABEL

  • 使用-edocker run的环境variables

  • 把环境variables放在docker-compose.yml下的“environment”或“labels”

Dockerfile

在你的Dockerfile文件中:

 ENV SERVICE_NAME MyApp ENV SERVICE_8080_CHECK_HTTP /health ENV SERVICE_8080_CHECK_INTERVAL 60s 

这里的/health端点来自Spring Boot Actuator库,我只是把它放在我的Spring Boot应用程序的pom.xml文件中。 但是,您也可以使用任何其他端点。

 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 

docker run

 docker run -d -e "SERVICE_NAME=myapp" -e "SERVICE_8080_CHECK_HTTP=/health" -e "SERVICE_8080_CHECK_INTERVAL=10s" -p 8080:8080 --name MyApp myapp 

确保您使用的是正确的HTTP服务器端口并且可以访问。 在我的情况下,Spring Boot默认使用8080。

Docker撰写

在“环境”或“标签”属性下添加健康检查信息:

 myapp: image: apps/myapp restart: always environment: - SERVICE_NAME=MyApp - SERVICE_8080_CHECK_HTTP=/health - SERVICE_8080_CHECK_INTERVAL=60s ports: - "8080:8080" 

启动领事服务器

 docker run -d -p "8500:8500" -h "consul" --name consul gliderlabs/consul-server -server -bootstrap 

“gliderlabs / consul-server”图片默认激活Consul UI。 所以你不必指定任何其他参数。

然后启动注册人

 docker run -d \ --name=registrator \ -h $(docker-machine ip dockervm) \ -v=/var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:v6 -resync 120 -deregister on-success \ consul://$(docker-machine ip dockervm):8500 

“重新同步”和“取消注册”参数将确保领事和登记员同步。

Interesting Posts