docker-compose 健康检查问题

问题描述 投票:0回答:2

我目前正在使用 docker-compose 开发一个微服务项目。所以我在我的容器中添加了健康检查。但除了 mysql 之外,其他所有东西都保持不健康,但我不知道为什么。

这是我的 docker-compose.yml 文件。

version: "3"
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 52.78.52.254
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper

  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql:rw
    environment:
      - MYSQL_ROOT_PASSWORD=dnjscksdn98@
      - MYSQL_DATABASE=explanet_dev
      - MYSQL_USER=alex
      - MYSQL_PASSWORD=dnjscksdn98@
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "mysql", "-u$$MYSQL_USER", "-p$$MYSQL_ROOT_PASSWORD" ]
      interval: 30s
      timeout: 10s
      retries: 3

  api-gateway:
    container_name: api-gateway
    ports:
      - "80:80"
    build:
      context: ./api-gateway
      args:
        ENVIRONMENT: dev
      dockerfile: Dockerfile
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://api-gateway/health-check" ]
      interval: 30s
      timeout: 10s
      retries: 3
    depends_on:
      - mysql

  chatting-service:
    container_name: chatting-service
    ports:
      - "8080:8080"
    build:
      context: ./chatting-service
      args:
        ENVIRONMENT: dev
      dockerfile: Dockerfile
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://chatting-service:8080/health-check" ]
      interval: 30s
      timeout: 10s
      retries: 3
    depends_on:
      - mysql
      - kafka
      - api-gateway

如果我输入

docker inspect ${any container name}
,它会在
State
中显示如下。

"Health": {
                "Status": "unhealthy",
                "FailingStreak": 12,
                "Log": [
                    {
                        "Start": "2020-12-01T04:47:28.090046668Z",
                        "End": "2020-12-01T04:47:28.158193366Z",
                        "ExitCode": -1,
                        "Output": "OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
                    },
                    {
                        "Start": "2020-12-01T04:47:58.162656864Z",
                        "End": "2020-12-01T04:47:58.233280387Z",
                        "ExitCode": -1,
                        "Output": "OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
                    },
                    {
                        "Start": "2020-12-01T04:48:28.238446336Z",
                        "End": "2020-12-01T04:48:28.325520772Z",
                        "ExitCode": -1,
                        "Output": "OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
                    },
                    {
                        "Start": "2020-12-01T04:48:58.330407168Z",
                        "End": "2020-12-01T04:48:58.398503364Z",
                        "ExitCode": -1,
                        "Output": "OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
                    },
                    {
                        "Start": "2020-12-01T04:49:28.403163576Z",
                        "End": "2020-12-01T04:49:28.477627297Z",
                        "ExitCode": -1,
                        "Output": "OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
                    }
                ]
            }

我的 java Dockerfile 看起来像这样。

FROM adoptopenjdk/openjdk11:alpine-jre
COPY build/libs/base-service-0.0.1-SNAPSHOT.jar base-service.jar
ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}
ENTRYPOINT ["java", "-jar", "base-service.jar"]

我目前在 Ubuntu 20.04 服务器上运行。有解决办法吗?

docker docker-compose health-check
2个回答
3
投票

您好,错误消息非常清楚,您无法运行curl进行健康检查,因为它不包含在您使用的基础映像中,您需要安装它。
高山图像

示例

0
投票

除了必须使用

curl
在 Alpine 基础镜像上安装
apk add curl
以便使用
curl
运行测试之外,您可能还需要使用
depends_on
升级
condition: service_healthy
配置。

depends_on:
  api-gateway:
    condition: service_healthy

因为,据我所知,

depends_on
仅检查服务是否已started,并且不会等待healthy状态,除非明确定义了条件。

© www.soinside.com 2019 - 2024. All rights reserved.