You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose健康检查失败后容器未退出,需触发启动失败退出

解决方案

Docker 默认的健康检查只会标记容器状态为 unhealthy,不会主动终止容器。要实现健康检查失败时让容器退出并输出 failed to start container 错误,需要调整两处配置:

1. 给镜像安装 curl 工具

当前使用的 golang:1.21 镜像默认没有 curl,健康检查的 curl 命令会直接失败。修改 Dockerfile 添加 curl 安装步骤:

FROM golang:1.21

WORKDIR /src

# 安装curl用于健康检查,清理apt缓存减小镜像体积
RUN apt-get update && apt-get install -y --no-install-recommends curl \
    && rm -rf /var/lib/apt/lists/*

COPY go.mod go.sum ./
RUN go mod download

2. 修改健康检查命令,失败时终止容器

在健康检查命令中,当 curl 请求失败时,先输出指定错误信息,再终止容器的主进程(PID 1,也就是 go run main.go 进程),这样容器就会随之退出。修改 Docker Compose 的 healthcheck 部分:

version: "3"
services:
  app:
    build: .
    ports:
      - 8080:8080
    volumes:
      - "./:/src"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8080/fail-health-check || (echo \"failed to start container\" && kill 1)"]
      interval: 5s
      timeout: 5s
      retries: 1
    command: ["go", "run", "main.go"]

说明

  • curl -f 会在 HTTP 状态码 >=400 时返回非零退出码,触发后续的错误处理逻辑
  • kill 1 直接终止容器的主进程,Docker 会随之停止并退出容器
  • 配置的 retries:1 意味着第一次健康检查失败就会执行退出逻辑,不会重复检查

重新构建并启动容器后,当 /fail-health-check 路径返回 404 时,容器会输出 failed to start container 并立即退出。

内容的提问来源于stack exchange,提问作者onemin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:30:26