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