如何使用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中使用
ENV
或LABEL
-
使用
-e
将docker 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
“重新同步”和“取消注册”参数将确保领事和登记员同步。