1

我正在尝试向我的 docker 容器添加运行状况检查,所以在我的 Dockerfile 中我添加了这一行

HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1

大致基于本教程:https ://howchoo.com/g/zwjhogrkywe/how-to-add-a-health-check-to-your-docker-container 。在我的 docker-compose 文件中,我添加了这样的运行状况检查行:

    healthcheck:
      test: ["CMD", "curl", "--silent", "--fail", "http://localhost:8080/health"]

但容器总是报告不健康。因此,如果我执行docker exec -it my-container /bin/bash并进入容器,然后执行运行状况请求,我会得到:

    $ curl --fail http://localhost:8080/health
    curl: (22) The requested URL returned error: 411 Length Required

我错过了什么?Nginx 已经安装在容器中,所以我想简单地使该 URL/health正常工作。

4

3 回答 3

2

我放弃了使用HEALTHCHECK命令Dockerfile,而是nginx.conf通过添加来更改文件

    location /health {
        access_log off;
        return 200 "healthy\n";
    }

docker-compose.yml保持不变。这对我来说足够好。

于 2020-06-02T09:43:56.163 回答
0

An alternative approach, correlating a port being listened on with a healthy status.

netcat is installed by default in Alpine Linux

  nginx:
    image: nginx:1.17-alpine
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "nc", "-vz", "-w1", "localhost", "80"]
      interval: 1s
      timeout: 1s
      retries: 30

This will exit with status 0 if port 80 is open.

于 2022-02-20T09:25:12.917 回答
0

作为解决方案,您可以使用以下示例 - 如何将健康检查添加到您的 Docker 容器

他们提供的 Dockerfile 有一个小的更正,尽管存在检查健康状态的问题(curl 也必须安装在那里,但如果您需要任何帮助或有任何问题,请告诉我)。

请参考这个特定的解决方案 -

FROM python:3.6-alpine

COPY . /app

WORKDIR /app

RUN pip install -r requirements.txt
RUN mkdir /data \
    && apk add --no-cache \
        openssl \
        curl \
        dumb-init \
        postgresql-libs \
        ca-certificates

#CMD apt-get install curl

HEALTHCHECK CMD curl -f http://localhost:5000/ || exit 1

CMD ["python", "app.py"]
于 2021-09-01T17:49:19.713 回答