From fa60c402adbce607f953cd63909638047f34045f Mon Sep 17 00:00:00 2001 From: FuryL <748550450@qq.com> Date: Mon, 23 Feb 2026 01:03:32 +0800 Subject: [PATCH] perf: replace mongosh ping with Python script for lightweight healthcheck Signed-off-by: FuryL <748550450@qq.com> --- compose.yml | 7 +++++-- mongo.Dockerfile | 6 ++++++ mongo_ping.py | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 mongo.Dockerfile create mode 100644 mongo_ping.py diff --git a/compose.yml b/compose.yml index 91b5343..b46d3f0 100644 --- a/compose.yml +++ b/compose.yml @@ -3,12 +3,15 @@ name: stoat services: # MongoDB: Database database: - image: docker.io/mongo + build: + context: . + dockerfile: mongo.Dockerfile restart: always volumes: - ./data/db:/data/db + - ./mongo_ping.py:/mongo_ping.py healthcheck: - test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet + test: ["CMD", "python3", "/mongo_ping.py"] interval: 10s timeout: 10s retries: 5 diff --git a/mongo.Dockerfile b/mongo.Dockerfile new file mode 100644 index 0000000..7303ff6 --- /dev/null +++ b/mongo.Dockerfile @@ -0,0 +1,6 @@ +FROM docker.io/mongo:latest + +# install Python3, pip, pymongo for low memory usage healthcheck +RUN apt-get update && \ + apt-get install -y python3 python3-pip python3-pymongo && \ + rm -rf /var/lib/apt/lists/* diff --git a/mongo_ping.py b/mongo_ping.py new file mode 100644 index 0000000..f5fabb3 --- /dev/null +++ b/mongo_ping.py @@ -0,0 +1,24 @@ +from pymongo import MongoClient +from pymongo.errors import PyMongoError +import sys +import json + +try: + client = MongoClient( + "mongodb://localhost:27017", + connectTimeoutMS=3000, + serverSelectionTimeoutMS=5000, + socketTimeoutMS=5000, + directConnection=True, + ) + + client.admin.command("ping") + print(json.dumps({"ok": 1})) + sys.exit(0) + +except PyMongoError as e: + print(json.dumps({ + "ok": 0, + "error": str(e) + }, ensure_ascii=False), file=sys.stderr) + sys.exit(1) \ No newline at end of file