首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头-撰写:健康检查脚本(卷曲),但服务始终(健康:开始)

码头-撰写:健康检查脚本(卷曲),但服务始终(健康:开始)
EN

Stack Overflow用户
提问于 2018-09-14 11:58:14
回答 1查看 3.3K关注 0票数 0

我有下面的docker-compose

代码语言:javascript
复制
version: '2.1'
services:
    myprogram-app:
        image: myprogram
        mem_limit: 1024m
        environment:
            - SPRING_PROFILES_ACTIVE=prod,swagger
            - EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE=http://admin:$${jhipster.registry.password}@jhipster-registry:8761/eureka
            - SPRING_CLOUD_CONFIG_URI=http://admin:$${jhipster.registry.password}@jhipster-registry:8761/config
            - SPRING_DATASOURCE_URL=jdbc:postgresql://myprogram-postgresql:5432/myprogram
            - JHIPSTER_SLEEP=30
            - SPRING_DATA_ELASTICSEARCH_CLUSTER_NODES=myprogram-elasticsearch:9300
            - JHIPSTER_REGISTRY_PASSWORD=password
            - EMAIL_USERNAME
            - EMAIL_PASSWORD
        ports:
            - 8080:8080
        networks:
          - backend
        depends_on:
          jhipster-registry:
            condition: service_healthy
          myprogram-postgresql:
            condition: service_started
          myprogram-elasticsearch:
            condition: service_started
        restart: on-failure
    myprogram-postgresql:
        image: postgres:9.6.5
        mem_limit: 256m
        environment:
            - POSTGRES_USER=myprogram
            - POSTGRES_PASSWORD=myprogram
        networks:
          - backend
    myprogram-elasticsearch:
        image: elasticsearch:2.4.6
        mem_limit: 512m
        networks:
          - backend
    jhipster-registry:
        extends:
            file: jhipster-registry.yml
            service: jhipster-registry
        mem_limit: 512m
        ports:
            - 8761:8761
        networks:
          - backend
        healthcheck:
          test: ["CMD", "./isUp", "jhipster-registry:8761"]
          interval: 30s
          retries: 20
networks:
  backend:
    driver: "bridge"

并在同一个目录(项目根目录)中使用以下脚本:

代码语言:javascript
复制
echo Testing if $1 is UP

http_code=$(curl -LI $1 -o /dev/null -w '%{http_code}\n' -s)

if [ ${http_code} -eq 200 ]; then
    echo The service is UP and Running
    exit 0
else
    echo The service is DOWN
    exit 1
fi

我面临的问题是,即使在jhipster注册服务已经启动之后,它仍在继续向我展示

代码语言:javascript
复制
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                            PORTS                    NAMES
8b16c572e0f2        jhipster/jhipster-registry:v3.2.4   "/bin/sh -c 'java   …"   6 minutes ago       Up 6 minutes (health: starting)   0.0.0.0:8761->8761/tcp   compose_jhipster-registry_1
ed86d15ea485        elasticsearch:2.4.6                 "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes                      9200/tcp, 9300/tcp       compose_myprogram-elasticsearch_1
f268fa1a11f1        postgres:9.6.5                      "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes                      5432/tcp                 compose_myprogram-postgresql_1

即使服务已经启动并运行(我也登录了它)。

通过在我的机器上执行isUp命令,我还做了一个测试,它的工作方式与预期的一样:

代码语言:javascript
复制
izio@1z10:~/Desktop/WorkSpace/myprogram/compose$ ./isUp.sh localhost:8761
Testing if localhost:8761 is UP
The service is UP and Running
izio@1z10:~/Desktop/WorkSpace/myprogram/compose$
izio@1z10:~/Desktop/WorkSpace/myprogram/compose$ echo $?
0
izio@1z10:~/Desktop/WorkSpace/myprogram/compose$ 

最后,注册表服务在终止重试后变得不健康。

代码语言:javascript
复制
izio@1z10:~/Desktop/WorkSpace/myprogram/compose$  docker ps
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
8b16c572e0f2        jhipster/jhipster-registry:v3.2.4   "/bin/sh -c 'java   …"   10 minutes ago      Up 10 minutes (unhealthy)   0.0.0.0:8761->8761/tcp   compose_jhipster-registry_1
ed86d15ea485        elasticsearch:2.4.6                 "/docker-entrypoint.…"   10 minutes ago      Up 10 minutes               9200/tcp, 9300/tcp       compose_myprogram-elasticsearch_1
f268fa1a11f1        postgres:9.6.5                      "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes               5432/tcp                 compose_myprogram-postgresql_1

我搞不懂这次健康检查有什么问题。怎么修呢?

相同的东西,使用127.0.0.1:8761

代码语言:javascript
复制
test: ["CMD", "./isUp", "127.0.0.1:8761"]

或本地主机:8761

代码语言:javascript
复制
test: ["CMD", "./isUp", "localhost:8761"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-15 20:11:57

这个docker-compose配置有几个问题:

  1. jhipster-registry基于openjdk:8,没有安装curl
  2. isUp脚本没有复制到容器的文件系统,所以它甚至没有被执行。

为了解决这个问题,我找到的解决方案利用了基本容器功能。由于它是openjdk:8,所以可以通过在jar中导出的Java程序测试服务可用性。所以我就这么做了。

在目录的根目录中,放置一个与以下类对应的Ping.jar

代码语言:javascript
复制
package ping;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Main {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.exit(-1);
        }

        String host = args[0];
        int port = 0;

        try {
            port = Integer.parseInt(args[1]);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            System.exit(-2);
        }

        try (Socket socket = new Socket()) {
            socket.connect(new InetSocketAddress(host, port), 10 * 1000);
            System.exit(0);
        } catch (IOException e) {
            System.exit(1);
        }
    }
}

然后,通过jhipster-registry字段使它在容器中可用:

代码语言:javascript
复制
    jhipster-registry:
    extends:
        file: jhipster-registry.yml
        service: jhipster-registry
    mem_limit: 512m
    ports:
        - 8761:8761
    networks:
      - backend
    volumes:
      - ${PWD}/Ping.jar:/Ping.jar
    healthcheck:
      test: ["CMD", "java", "-jar", "/Ping.jar", "localhost", "8761"]
      interval: 30s
      retries: 20

这样,一旦服务准备好接受连接,它将最终显示为健康

代码语言:javascript
复制
CONTAINER ID        IMAGE                               COMMAND                   CREATED             STATUS                   PORTS                              NAMES
b3dd86605278        jhipster/jhipster-registry:v3.2.4   "/bin/sh -c 'java   …"    3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:8761->8761/tcp             compose_jhipster-registry_1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52331535

复制
相关文章

相似问题

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