Вы можете сделать это, мне недавно пришлось запустить mongo --repair
, затем запустить сам MongoDB, и после того, как MongoDB заработал, мне нужно было добавить своего пользователя в БД, вы можете легко изменить вещи для запуска команд только после всех трех MongoDB
Возможный docker-compose.yml:
version: "2"
services:
mongo:
container_name: mongo
restart: on-failure:10
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=<user>
- MONGO_INITDB_ROOT_PASSWORD=<pass>
- MONGO_INITDB_DATABASE=db
volumes:
- ./data:/data/db
ports:
- "27017:27017"
command: bash -c "mongod --repair && mongod"
mongoClient:
image: mongo
container_name: mongoClient
links:
- mongo
volumes:
- ./deployment_scripts:/deployment_scripts
command:
- /deployment_scripts/add_user.sh
depends_on:
- mongo
app:
container_name: app
restart: always
build: .
volumes:
- .:/usr/src/app
ports:
- "3000:3000"
depends_on:
- mongoClient
links:
- mongo
Мой /deployment_scripts/add_user.sh
сценарий ожидания для подключения MongoDB:
until mongo --host mongo --eval "print(\"waited for connection\")"
do
sleep 1
done
// you can add more MongoDB waits here
echo "Adding user to MongoDB..."
mongo --host mongo --eval "db.createUser({ user: \"<user>\", pwd: \"<pass>\", roles: [ { role: \"root\", db: \"admin\" } ] });"
echo "User added."
Обратите внимание, что вы можетеобратитесь ко всем трем своим MongoDB, заменив --host mongo
на --host mongo1
--host mongo2
и --host mongo3
.Вы будете использовать это для обеих команд eval в сценарии.
Благодарим за этот ответ SO https://stackoverflow.com/a/45060399/4295037, который я использовал (until mongo ...
).