Docker Healthcheck 万金油

模板一:网络服务万金油(只要有网络端口,通杀) 如果容器是 Web 服务(如 Nginx、Tomcat、Node.js)、数据库(如 Redis、MySQL)或者各种中间件,只要它暴露了 TCP 端口,且容器内带有最基础的 sh,这就是最无敌的万金油配置。 它利用了 Linux 内核原生 </dev/tcp 漏洞,完全不依赖 curl 或 wget 。 healthcheck: # 语法解释:尝试与容器本地的 8080 端口建立 TCP 连接,失败则退出码为 1 test: ["CMD-SHELL", "sh -c '</dev/tcp/127.0.0.1/8080' || exit 1"] interval: 10s # 10秒探一次,既保证敏锐度,又不会给系统带来TCP连接压力 timeout: 3s # 握手超过3秒没反应,说明网络栈或主线程已经卡死 retries: 3 # 连续失败3次(大约30秒内)正式宣判死刑 start_period: 30s # 30秒新手保护期,给服务腾出启动和绑定端口的时间 注:使用时只需要把 8080 改成你容器内部的实际端口(如 Redis 改成 6379,Nacos 改成 8848)即可。 模板二:Java/Spring Boot 专属万金油(解决高 CPU 与 Full GC 假死) 对于 Java 应用,有时候端口虽然勉强能连上,但实际上 JVM 内部因为内存溢出(OOM)或者恐怖的 CPU 占用,已经完全无法处理业务了。 这时候用 Java 自带的诊断工具 jcmd 去拍 JVM 的脑袋,是最精准的万金油手段(前提是使用 JDK 镜像,非精简的 JRE)。 ...

2026-07-11 04:30:54 PM · 1 分钟

Docker 常用配置

Kafka Kafdrop services: kafdrop: image: obsidiandynamics/kafdrop container_name: kafdrop ports: - "9000:9000" environment: KAFKA_BROKERCONNECT: "localhost:9092" SERVER_SERVLET_CONTEXTPATH: "/" restart: unless-stopped KRaft 模式 services: kafka: image: apache/kafka:3.9.0 container_name: kafka hostname: kafka ports: - "9092:9092" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 # 注意:这里不要换行,不要逗号 KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 # 外部访问地址 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk volumes: - ./data:/var/lib/kafka/data restart: unless-stopped

2026-07-09 11:04:37 AM · 1 分钟