Use bash script. (bitnami - for example)
#init_replicaset.sh
#!/bin/bash
if mongosh --eval 'rs.status().ok == 1'; then
echo "Replica set already initialized, skipping."
else
echo "Initializing replica set..."
mongosh --eval 'rs.initiate({
_id: "replicaset",
members: [
{ _id: 0, host: "mongodb-primary:27017" },
]
})'
fi
#docker-compose.yml
volumes:
- ./mongod.conf:/opt/bitnami/mongodb/conf/mongod.conf
- ./init-replicaset.sh:/docker-entrypoint-initdb.d/init-replicaset.sh
- mongo_primary:/bitnami/mongodb
entrypoint: [ "bash", "-c",
"mongod --config /opt/bitnami/mongodb/conf/mongod.conf & \
sleep 3 && /docker-entrypoint-initdb.d/init-replicaset.sh && wait" ]