#!/bin/bash if [ -n "$BACKUP_CRON" ]; then env >> /etc/environment echo "$BACKUP_CRON root . /etc/environment; /usr/local/bin/backup >> /var/log/mongo-backup.log 2>&1" > /etc/cron.d/mongo-backup chmod 0644 /etc/cron.d/mongo-backup cron fi # Clean locks & repair only if lock files exist (unclean shutdown) if [ -f /data/db/mongod.lock ] || [ -f /data/db/WiredTiger.lock ] || [ -f /data/db/.lock ]; then echo "Stale locks detected, running repair..." rm -f /data/db/mongod.lock /data/db/.lock /data/db/WiredTiger.lock mongod --repair echo "Repair complete, starting normally..." fi if [ -n "$REPLICA" ]; then # Start mongo temporarily in background with replSet enabled mongod --replSet rs0 --bind_ip_all & MONGO_PID=$! # Wait for mongo to be ready echo "Waiting for MongoDB to be ready..." until mongosh --quiet --eval "db.runCommand({ ping: 1 })" &>/dev/null; do sleep 1 done # Build members array from REPLICA CSV MEMBERS="" INDEX=0 IFS=',' read -ra HOSTS <<< "$REPLICA" for HOST in "${HOSTS[@]}"; do [ $INDEX -gt 0 ] && MEMBERS+="," MEMBERS+="{ _id: $INDEX, host: '$HOST' }" INDEX=$((INDEX + 1)) done # Init or reconfig replica set mongosh --quiet --eval " try { const config = rs.conf(); config.members = [$MEMBERS]; rs.reconfig(config, { force: true }); print('Replica set reconfigured'); } catch(e) { rs.initiate({ _id: 'rs0', members: [$MEMBERS] }); print('Replica set initiated'); } " # Stop the temporary mongod kill $MONGO_PID wait $MONGO_PID 2>/dev/null fi if [ -n "$REPLICA" ]; then set -- mongod --replSet rs0 --bind_ip_all fi # Hand off to normal mongo entrypoint exec /usr/local/bin/docker-entrypoint.sh "$@"