Задать вопрос
ivankprod
@ivankprod
Системный / веб fullstack-разработчик

Почему не работает healthcheck внутри Docker-контейнера?

Всем ку. Не могу понять, в чем проблема, может не вижу что-то. Сама аппа контейнера слушает на 80 порту и роут /health отдает ответ и код 200, аппа работает и запускается, в ней проблем нет. HealthCheck для контейнера не работает для Swarm ни через curl ни через httpcheck, контейнеры киляются и пересоздаются заново при replicas > 1. Контейнеры и сам Swarm управляются через Dokploy на VPS. Такое чувство, будто внутри контейнера нет доступа к http://localhost/health, проверить не могу, т.к. scratch-образ, но возможно в нем и есть причина? Просто не хотелось бы раздувать его.

Dockerfile:
# syntax=docker/dockerfile:1

FROM golang:1.24 AS builder

ARG CGO_ENABLED=0
WORKDIR /app

RUN go env -w GOMODCACHE=/root/.cache/go-build

COPY . ./

RUN --mount=type=cache,target=/root/.cache/go-build go mod download
RUN --mount=type=cache,target=/root/.cache/go-build go build -o ./bin/service

FROM scratch

WORKDIR /app

COPY --from=builder /app/bin/service ./service

EXPOSE 80 8081

COPY --from=ghcr.io/tarampampam/microcheck:1 /bin/httpcheck /bin/httpcheck
HEALTHCHECK --interval=1m --timeout=5s CMD ["httpcheck", "http://localhost/health"]

ENTRYPOINT ["/app/service"]
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    Docker + Ansible - с нуля, деплой и управление Swarm
    1 неделя
    Далее
  • Учебный центр IBS
    ADM-019 Основы Docker
    1 неделя
    Далее
  • Слёрм
    Docker для админов и разработчиков
    4 недели
    Далее
Решения вопроса 1
ivankprod
@ivankprod Автор вопроса
Системный / веб fullstack-разработчик
Решение - CMD ["/bin/httpcheck", "http://localhost/health"]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
1. Потому, что localhost внутри контейнера отличается от localhost хоста, а 80 порт, который отвечает http - может быть доступен только на хосте, а внутри контейнера /app/service слушает другой порт.
2. Потому, что httpcheck может вообще не запускаться внутри образа from scratch, если собран не статически.
3. Потому, что тот, кто задает вопрос - не стал проверять два первых варианта, хотя они просятся, чтобы их проверить и не дал никаких подробностей и возможно дело в третьем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы