Files
mongodb/entrypoint.sh
ztimson f81e6cd951
All checks were successful
Build and publish / Build Container (push) Successful in 1m47s
Added replica init
2026-06-12 02:24:35 -04:00

63 lines
1.8 KiB
Bash

#!/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 "$@"